본문 바로가기
SW

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

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

[2.3 서식 설정]

편집기에서 문서 표현과 서식 설정은 완전히 다른 영역이다. 문서의 물리적 구조를 저장하는 능력이 서식에 맞는 특정 구조를 만들어 내는지를 알려주지는 않는다. 이런 부분은 거의 Lexi 구현자의 책임으로 돌아간다. 구현자는 텍스트를 라인으로 나누고 라인을 열로 구분하는 등 사용자의 수준 높은 기대에 부응해야 한다. Lexi의 서식 설정(formatting) 알고리즘은 이것을 모두 고려해서 만들어야 한다.

 

[서식 설정 알고리즘의 캡슐화]

중요하게 고려할 사항은 서식 설정의 품질과 서식 설정에 필요한 속도를 어떻게 균형 있게 잘 맞추느냐 하는 것이다. 다시 말해, 문서가 화면에 표시되는 외양의 품질을 유지하면서 적정한 시간 안에 처리되어야 한다. 이러한 균형을 맞추려면 여러 가지 요인들을 고려해야 하는데, 모든 요인을 컴파일 시점에 결정할 수는 없다. 속도와 저장 용량 간의 균형도 필요하다. 얼마나 많은 정보를 저장하고 있느냐에 따라 속도가 빨라지기도, 느려지기도 하기 때문이다.

서식 설정 알고리즘을 쉽게 변경할 수 있도록 설계해야 한다. 이를 위해서, 알고리즘을 별도의 객체로 둘러싸서 쉽게 대체 가능하도록 할 수 있다. 클래스 계층의 루트인 최상위 클래스는 다양한 서식 설정 알고리즘을 지원할 수 있는 인터페이스를 정의하고, 각 서브클래스가 특별한 아록리즘을 수행하도록 인터페이스를 구현한다. 그리고 Glyph 클래스의 서브클래스를 통해 특정 알고리즘 객체를 이용하게 하여 자식들을 자동으로 구조화시킬 수 있다.

 

[합성자와 복합]

서식 설정 알고리즘을 캡슐화할 수 있는 객체를 Compositor클래스로 정의한다. Compositor 클래스가 포맷을 지정하는 글리프는 Glyph 클래스의 특정 서브클래스인 Composition 클래스와 자식 관계를 갖는 객체들이다. Composition 클래스는 Glyph 클래스의 서브클래스이면서 다시 Glyph 클래스의 인스턴스를 집합 관계의 자식으로 포함한다. Composition 객체는 서식을 설정할 때 Compositor 객체의 Compose() 연산을 호출한다. 이후에 이 객체는 Composition 객체와 자식 관계에 있는 인스턴스를 라인 분리 알고리즘에 따라서 반복적으로 생성하면서 새로운 Row와 Column 글리프를 삽입한다.

각 Compositor 클래스는 서로 다른 라인 ㅂ누리 알고리즘을 구현한다. 이렇게 Compositor-Composition으로 클래스를 구분해 두면, 문서의 물리적 구조와 다른 서식 설정 알고리즘을 지원하는 코드 사이를 확실히 구분할 수 있다. 클래스 분리는 문서의 물리적 구조를 지원하는 코드 및 다른 서식 설정 알고리즘을 위한 코드가 확실히 분리될 수 있도록 해준다.

 

[전략 패턴]

알고리즘을 객체로 캡슐화하는 것, 이것이 전략 패턴의 의도이다. 이 전략 패턴의 주요 참여자는 Strategy 패턴을 구현한 객체(서로 다른 알고리즘들을 캡슐화한)와 이 객체가 동작할 전후 관계, 즉 동작 환경(context)이다.

Compositor 클래스 : Strategy 클래스 - 서로 다른 서식 설정 알고리즘을 캡슐화

Compositon 클래스 : Compostor 클래스의 전략에 대한 Context 클래스

전략 패턴을 적용하는 데 가장 중요한 것은 전략과 동작 환경에 대한 인터페이스를 충분히 일반화해야 한다는 것이다. 새로운 알고리즘을 지원하기 위해서 전략이나 배경 인터페이스를 변경할 필요는 없다.

반응형

댓글