Kaboom

[Design Pattern]3. Decorator Pattern 본문

Design Pattern

[Design Pattern]3. Decorator Pattern

akawarren 2012. 6. 25. 10:50

# 디자인 원칙 : 클래스는 확장에 대해서는 열려있어야 하나 코드 변경에 대해서는 닫혀있어야 한다. (기존 코드는 변경하면 안됨)

# 데코레이터 패턴은 객체에 추가적인 요건을 동적으로 첨가한다. 데코레이터는 서브클래스를 만드는 것을 통해서 기능을 유연하게 확장할 수 있는 방법을 제공한다.

# 구성 요소는 다음과 같다 : 추상 구성요소, 구상 구성요소, 추상 데코레이터, 구상 데코레이터

# 데코레이터의 수퍼클래스는 데코레이터가 장식(데코레이트)하는 객체의 수퍼클레스와 같은 것을 써야 한다.

예) Abstract Class Object, (추상 구성요소)

     Abstract Class Decorator extends Object (추상 데코레이터)

     Class RealObject extends Object, (구상 구성요소)

     Class RealDecorator extends Decorator (구상 데코레이터)

# 데코레이터 객체는 내부에 자신이 장식하는 객체의 인스턴스에 대한 레퍼런스를 가져야 한다.

# 즉, Father라는 Class를 상속하는 Son이라는 클래스에 새로운 동작이 추가되어야 할때, Son 클래스를 상속받는 것이 아니라, Father Class를 상속받아 Son 클래스를 감싸서 이 인스턴스에 새로운 동작을 추가하는 데코레이터를 새로 정의하는 것임.

# 단점 : 자잘한 객체가 많이 추가될 수 있고, 코드가 필요 이상으로 복잡해 질 수 있다.

# 포인트 : 상속이 좋은 방법이긴 하지만, 서브클래스를 계속 만들게 되면, 모든 서브클래스에서 똑같은 행동을 상속받아야 되고, 컴파일시에 결정되기 때문에 실행시에 동적으로 이를 정의할 수가 없다. 중요한 것은, 기존 코드를 건드리지 않고 전혀 생각지 못한 기능을 새로 추가할 수 있다는 점이다. -> 기존 코드를 건드리지 않는다는 점이 핵심임.

 

 

Comments