본문 바로가기
SW

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

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

[Chapter 2. 사례 연구: 문서 편집기 설계]

WYSIWYG: What You See Is What You Get, 눈에 보이는 대로 출력됨

 

[2.1 설계 문제들]

1.문서 구조 : 문서의 내부를 어떻게 표현할 것인지

2.서식 설정

3.사용자 인터페이스 꾸미기

4.여러 룩앤필(look and feel) 표준의 지원

5.여러 윈도우 시스템의 지원

6.사용자 조작

7.철자 검사와 붙임표 처리

 

[2.2 문서 구조]

문서는 문자, 선, 다각형 등 기본적인 그래픽 요소를 단순히 배열한 것입니다. 이런 요소들을 통해서 문서의 전체 내용을 정의할 수 있게 된다.

인터페이스를 직관적이고 간단하게 만들어야 한다.

편집기의 내부 표현은 다음 항목들을 지원해야 한다.

-문서의 물리적 구조 유지 기능

-문서를 시각적으로 생성하고 표현하는 부분

-내부 표현 영역의 요소들과 화면에 표시된 요소들을 사상하는 부분

 

<제약 사항>

1.문자와 그래픽을 동일하게 다뤄야 한다.

2.단일 요소와 그룹 요소를 구분해서 구현하면 안된다.

그러나 가끔은 분석 대사에 따라서 분석 방법이 달라져야 한다. 다시 말해, 어떤 때는 모든 요소들을 서로 동일하게 다루어야 하고, 어떤 때는 서로 구분해서 처리해야 한다.

 

[재귀적 합성]

계층적으로 구조화된 정보를 보여주는 가장 일반적인 방법으로 재귀적 합성(Recursive Composition) 기법이 있다.

물리적 구조를 표현하는 데 있어서, 각각의 주요 요소를 모두 객체로 만들어 구현할 수 있다. 이렇게 하면 글자나 그래픽과 같은 시각적 요소뿐만 아니라 보이지 않는 구조적 요소(선, 열 등)도 포함할 수 있다.

 

[글리프(Glyph)]

화면에 표시되는 구성요소를 포괄적으로 일컫는 개념인 글리프는, 모든 객체를 위한 추상 클래스인 Glyph로 정의하려 한다. 글리프의 서브클래스는 기본적인 그래픽 요소(문자와 이미지 같은)와 구조적 요소(행과 열 같은)를 정의한다.

글리프는 세 가지의 기본적인 책임을 맡고 있다.

1.어떻게 자기 자신을 그리는지에 대한 부분

2.차지하는 영역이 얼마나 되는지에 대한 부분

3.자신의 자신들과 부모가 누구인지를 가리키거나 참조하는 부분

글리프의 서브클래스는 Draw() 연산을 재정의해서 윈도우에 자신을 그린다. Draw() 연산의 호출이 일어날 때 Window 객체에 대한 참조자를 전달받는다. Window 클래스는 스크린의 윈도우에 텍스트와 기본 도형을 표현하기 위한 그래픽 연산을 정의한다. Glyph의 서브클래스인 Rectangle 클래스는 Draw()연산을 재정의 한다.

부모 클래스는 서브클래스가 얼마나 많은 공간을 차지하는지 알아야 할 때가 있다.

글리프는 자식을 가질 수 있기 때문에, 그 자식들을 추가하고, 삭제하며, 접근할 공통의 인터페이스가 필요하다.

 

[복합체 패턴]

복합체 패턴은 객체지향 관점에서 재귀적 합성을 표현하는 패턴이다.

반응형

댓글