56
DIP Bridge pattern Layer architecture Devrookie, http://cafe.naver.com/devrookie 최기원

데브루키 스터디 발표

  • Upload
    dagri82

  • View
    913

  • Download
    2

Embed Size (px)

DESCRIPTION

dip,bridge pattern,layer architecture,의존관계 역전 원칙에 관한 PT

Citation preview

Page 1: 데브루키 스터디 발표

DIPBridge patternLayer architecture

Devrookie, http://cafe.naver.com/devrookie

최기원

Page 2: 데브루키 스터디 발표
Page 3: 데브루키 스터디 발표
Page 4: 데브루키 스터디 발표

소프트웨어 설계

왜 공부해야 할까?

개발중인 게임은 계속 바뀐다.

서비스중인 게임은 계속 바뀐다.

Page 5: 데브루키 스터디 발표

소프트웨어 설계

왜 공부해야 할까?

개발중인 게임은 계속 바뀐다.

서비스중인 게임은 계속 바뀐다.

점프 만들어주세요.

Page 6: 데브루키 스터디 발표

소프트웨어 설계

왜 공부해야 할까?

개발중인 게임은 계속 바뀐다.

서비스중인 게임은 계속 바뀐다.

점프 만들어주세요.

Page 7: 데브루키 스터디 발표

다음달부터는 말탈지도 몰라..

화살도 쏴야 하고..

말타면서 화살도 쏘고..

말타고 경주하는 레이싱 모드..

날아다니는 개새 몬스터가 추가될지도...

Page 8: 데브루키 스터디 발표

다음달부터는 말탈지도 몰라..

화살도 쏴야 하고..

말타면서 화살도 쏘고..

말타고 경주하는 레이싱 모드..

날아다니는 개새 몬스터가 추가될지도...

개새 이야기는 이창희님 PT를 보세요.

Page 9: 데브루키 스터디 발표

어떻게 하면 유연하게 기능을 추가할 수 있을까?

Page 10: 데브루키 스터디 발표

응집도는 높게 (High Cohesion)

의존성은 낮게 (Loose Coupling)

소프트웨어 디자인과 아키텍쳐 평가의보편적이고 일반적인 기준

Page 11: 데브루키 스터디 발표

응집도 높게

하나의 모듈에 하나의 기능을 온젂히 담게 하는것

Page 12: 데브루키 스터디 발표

응집도가 높으면 뭐가 좋을까?

‘점프를 넣어주세요’ 라는 요구사항이 생겼을때..

케릭터 기능만 수정 하면 된다.

Page 13: 데브루키 스터디 발표

의존성

서로 다른 기능의 모듈이 얼마나얽혀 있는가.

상호 의존도가 얼마나 높은가

Page 14: 데브루키 스터디 발표

의존성이 낮으면 뭐가 좋을까?

‘점프를 넣어주세요’ 라는 요구사항이 생겼을때..

케릭터 기능만 수정 하면 된다.

Page 15: 데브루키 스터디 발표

응집도 ∝ 의존성

어떻게 설계하면 응집도가 올라가고의존성이 내려갈까?

Page 16: 데브루키 스터디 발표

OOP 설계 5대원칙SRP (Single Reponsibility)

단일 책임 원칙

OCP (Open Close)개방 폐쇄 원칙

LSP (Liskov Substitution)리스코프 교체 원칙

ISP (Interface Segregation)인터페이스 격리 원칙

DIP (Dependency Inversion)의존 관계 역젂 원칙

Page 17: 데브루키 스터디 발표

OOP 설계 5대원칙SRP (Single Reponsibility)

단일 책임 원칙

OCP (Open Close)개방 폐쇄 원칙

LSP (Liskov Substitution)리스코프 교체 원칙

ISP (Interface Segregation)인터페이스 격리 원칙

DIP (Dependency Inversion)의존 관계 역젂 원칙

Page 18: 데브루키 스터디 발표
Page 19: 데브루키 스터디 발표

Dependency 의존관계Inversion 역젂Principle 원칙

상위 레벨의 모듈은 하위 레벨의 모듈에 의존해서는안되고, 양자 모두 추상화에 의존해야 한다. 추상화는 구체적인 구현에 의존해서는 안된다. 구현이 추상화에 의존해야 한다.

Page 20: 데브루키 스터디 발표

Dependency

의존 관계

LightSwitch LightLigthSwitch는 Light의 기능을 사용하여 자싞의 기능을 수행한다.

Page 21: 데브루키 스터디 발표

Class LightSwitch {…

public:void on()

{ pLight->on(); }void off()

{ pLight->off(); }void setLight(Light* p)

{ pLight = p; }…

private:Light* pLight;…

}

Class Light {

public:

void on();

void off();

}

Page 22: 데브루키 스터디 발표

…Light stand;

LightSwitch stand_switch;

// stand_switch에 stand를 연결

stand_switch.setLight(&stand);

stand_switch.on(); // stand를 킨다.

...

stand_switch.off(); // stand를 끈다.

...

Page 23: 데브루키 스터디 발표

Dependency

의존 관계

LightSwitch Light

Page 24: 데브루키 스터디 발표

Dependency Inversion

의존 관계 역젂?

LightSwitch Light

Page 25: 데브루키 스터디 발표

Class LightSwitch {

public:

void on();

void off();

}

Class Light{

public:void on()

{ pSwitch->on(); }

void off()

{ pSwitch->off(); }

private:

LightSwitch* pSwitch;

}

Page 26: 데브루키 스터디 발표

Class LightSwitch {

public:

void on();

void off();

}

Class Light{

public:void on()

{ pSwitch->on(); }

void off()

{ pSwitch->off(); }

private:

LightSwitch* pSwitch;

}

Page 27: 데브루키 스터디 발표

역젂의 의미인터페이스를 누가정하는가!!!

Page 28: 데브루키 스터디 발표

파란게빨간걸의존한다.

Switch

Light

<<interface>>

ISwitchableObject

Page 29: 데브루키 스터디 발표

Switch가인터페이스를제공한다.

Switch<<interface>>

ISwitchableObject

Page 30: 데브루키 스터디 발표

Class Switch {…

public:void on()

{ pSObject->on(); }void off()

{ pSObject->off(); }void setSwitchableObject

( ISwitchableObject* p ) { pSObject = p; }

…private:

ISwitchableObject* pSObject;…

}

Class ISwitchableObject {

public:

virtual void on() = 0;

virtual void off() = 0;

}

Page 31: 데브루키 스터디 발표

Light가인터페이스에맞게구현을바꾼다.

Light

<<interface>>

ISwitchableObject

Page 32: 데브루키 스터디 발표

Class Light : public

ISwitchableObject {

public:

void on();

void off();

}

Class ISwitchableObject {

public:

virtual void on() = 0;

virtual void off() = 0;

}

Page 33: 데브루키 스터디 발표

파란게빨간걸의존한다.

Switch

Light

<<interface>>

ISwitchableObject

Page 34: 데브루키 스터디 발표

…SwitchableObject pLight = new Light;

Switch lightSwitch;

lightSwitch.setSwitchableObject(pLight);

lightSwitch.on();

lightSwitch.off();

...

Page 35: 데브루키 스터디 발표

뭐가붙어도 Switch는수정이필요없다. 하지만,

Switch인터페이스수정하면대망, 확장은상관없다.

Switch

Light

<<interface>>

ISwitchableObject

TV 이것저것

Page 36: 데브루키 스터디 발표

뭐가붙어도 Switch는수정이필요없다. 하지만,

Switch인터페이스수정하면대망, 확장은상관없다.

Switch

Light

<<interface>>

ISwitchableObject

TV 이것저것

Page 37: 데브루키 스터디 발표

…SwitchableObject pTv = new TV();

Switch tvSwitch;

tvSwitch.setSwitchableObject(pTv);

tvSwitch.on();

tvSwitch.off();

...

Page 38: 데브루키 스터디 발표

DependencyInversionPrinciple

상위 레벨의 모듈은 하위 레벨의 모듈에 의존해서는안되고, 양자 모두 추상화에 의존해야 한다. 추상화는 구체적인 구현에 의존해서는 안된다. 구현이 추상화에 의존해야 한다.

Page 39: 데브루키 스터디 발표
Page 40: 데브루키 스터디 발표

패턴 이란?의존성은낮게응집도는 높게하다보니자주 사용되는설계패턴이생겼다.

Page 41: 데브루키 스터디 발표

Bridge Pattern

Abstraction

RefinedAbstraction

<<interface>>

Implementor

ConcreteImplemntorA ConcreteImplemntorB

Client

Page 42: 데브루키 스터디 발표

Bridge Pattern

Abstraction

RefinedAbstraction

<<interface>>

Implementor

ConcreteImplemntorA ConcreteImplemntorB

Client

Page 43: 데브루키 스터디 발표

Bridge Pattern의도 :

인터페이스를 통해 서브시스템사이의의존성을 없앤다. 이는 한 서브시스템의 변화가 다른 서브시스템에 영향을 미치지 못하게 한다.

Page 44: 데브루키 스터디 발표

DIP를 Pattern으로응용하면

Page 45: 데브루키 스터디 발표

ISwitchableObject 인터페이스를통해 Switch와 Light사이의의존성을없앴다.

Page 46: 데브루키 스터디 발표

패턴에 대한 생각.그냥 귀에 걸면 귀걸이 코에 걸면 코걸이

원리도 비슷하고 목적도 비슷하고 그냥

의존성은낮게응집도높게만들자.

Page 47: 데브루키 스터디 발표

패턴에 대한 생각.그냥 귀에 걸면 귀걸이 코에 걸면 코걸이

원리도 비슷하고 목적도 비슷하고 그냥

의존성은낮게응집도높게만들자.

Page 48: 데브루키 스터디 발표
Page 49: 데브루키 스터디 발표

Dependency InversionPrinciple

Architecture에 응용하면?

Page 50: 데브루키 스터디 발표

아키텍처

가장 첫단계는 시스템을추상화 수준에 따라서구분한다.

Page 51: 데브루키 스터디 발표

일반적인 게임의 아키텍쳐

Lv3렌더링레이어

Lv2 게임 로직 레이어

Lv1 시스템 레이어

Page 52: 데브루키 스터디 발표

의존관계를 따지면

렌더러 게임로직 시스템

Page 53: 데브루키 스터디 발표

렌더러<<interface>>렌더러가사용하는인터페이스

게임로직<<interface>>

게임로직이사용하는인터페이스

시스템

Page 54: 데브루키 스터디 발표

DependencyInversionPrinciple

상위 레벨의 모듈은 하위 레벨의 모듈에 의존해서는안되고, 양자 모두 추상화에 의존해야 한다. 추상화는 구체적인 구현에 의존해서는 안된다. 구현이 추상화에 의존해야 한다.

렌더러<<interface>>렌더러가 사용하는인터페이스

게임로직<<interface>>

게임로직이 사용하는인터페이스

시스템

Page 55: 데브루키 스터디 발표

끝, 정리

오늘 이야기한 것들을

두개의 키워드로 정리하면 뭘까요?

질문???

Page 56: 데브루키 스터디 발표

박일님 PThttp://parkpd.egloos.com/3339098

공봉식님 PThttp://www.slideshare.net/kongbong/3-4646419

Kasa 이창희님 PThttp://dev3d.tistory.com/32

NDC2010, 김주복님 PT 46~55p

http://ndc.nexon.com/150088595939