본문 바로가기
SW

GoF의 디자인 패턴(Design Patterns: Elements of Reusable Object-Oriented Software) - 2장 사례 연구:문서 편집기 설계(2.4)

by 라꾸스떼(YR) 2020. 4. 10.
반응형

[2.4 사용자 인터페이스 장식하기]

새로운 장식을 쉽게 추가하려면(특히,런타임에), 상속을 써서 사용자 인터페이스에 장식 요소를 추가하면 안 된다. 다른 사용자 인터페이스에는 이런 장식 요소가 있을지도 모른다는 가정 아래 설계해야만 사용자 인터페이스 설계의 유연성을 보장할 수 있다.

 

[투명성 포함]

프로그래밍 관점에서 볼 때, 사용자 인터페이스에 장식을 추가한다는 것은 결국 기존 코드의 확장이 필요하다는 뜻을 내포한다. 장식의 종류가 많아질 때마다 클래스를 만드는 해법은 언젠가는 더 이상의 확장을 불가능하게 한다. 이럴 때는 객체 합성이 훨씬 더 유연한 확장 방법이 될 수 있다.

Border 클래스의 인스턴스로 기존 글리프들을 장식하면 된다. 이 과정을 통해서 복합할 수 있는 두개의 후보가 생기게 된다. 하나는 글리프이고, 다른 하나는 테두리이다. 이렇게 하면, 추가한 장식 클래스에 해당하는 Border 클래스에 테두리를 그리는 코드만 작성하는 것으로 간단히 정리되며, 다른 기존의 클래스는 변경하지 않아도 된다. 외관을 갖는 테두리도 개념적으로는 글리프의 일종이기 때문에 Border 클래스도 Glyph의 서브클래스여야 한다.

평범한 글리프이건 테두리를 포함한 글리프이건 동일하게 취급할 수 있어야 한다. 즉, Border 인터페이스가 Glyph 인터페이스와 일치한다는 뜻이다. 이런 관계를 보장하기 위해 Border 클래스를 Glyph 클래스에서 상속한다.

 

<투명한 포함(transparent enclosure) 개념>

1.단일 자식(다른 말로 단일 구성요소)에 기반을 둔 합성고ㅏ

2.호환되는 인터페이스의 개념을 조합한 것

 

[단일 글리프]

일반적 복합에서 부모 객체는 무수히 많은 자식들을 가질 수 있다. 한번에 하나 이상의 객체를 꾸밀 수도 있지만, 그러게 되면 꾸민다는 개념에 다양한 종류의 복합을 혼합해야 한다. 즉, 장식마다 새로운 개념을 만들어내는 셈이다.

복합을 위해서는 이미 갖고 있는 클래스를 이용하고, 새로운 장식에 대해서만 새로운 클래스를 만드는 것이 바람직하다. 장식을 복합과 독립적으로 관리함으로써 장식에 관련된 클래스를 단순화할 수 있고 클래스의 수도 줄일 수 있다.

 

[장식자 패턴]

장식자 패턴은 “투명한 포함” 개념에 의해 장식을 지원하는 클래스와 포함되는 객체들 사이의 관계를 잡아낸 것이다. 장식자 패턴에서 “장식은”은, 객체에 추가할 수 있는 모든 책임에 해당한다. 장식에 해당하는 예로는, 처리부를 갖는 추상 구문 트리, 새로운 상태 전이를 갖는 유한 상태 오토마타(finite state automata), 속성 태그를 갖는 영속성 객체망 등이 있는데, 이것은 기본 객체에 추가적인 책임이 부여된 예들이다.

반응형

댓글