본문 바로가기

GoF의 디자인 패턴(Design Patterns: Elements of Reusable Object-Oriented Software)47

GoF의 디자인 패턴(Design Patterns: Elements of Reusable Object-Oriented Software) - 2장 사례 연구:문서 편집기 설계(2.4) [2.4 사용자 인터페이스 장식하기] 새로운 장식을 쉽게 추가하려면(특히,런타임에), 상속을 써서 사용자 인터페이스에 장식 요소를 추가하면 안 된다. 다른 사용자 인터페이스에는 이런 장식 요소가 있을지도 모른다는 가정 아래 설계해야만 사용자 인터페이스 설계의 유연성을 보장할 수 있다. [투명성 포함] 프로그래밍 관점에서 볼 때, 사용자 인터페이스에 장식을 추가한다는 것은 결국 기존 코드의 확장이 필요하다는 뜻을 내포한다. 장식의 종류가 많아질 때마다 클래스를 만드는 해법은 언젠가는 더 이상의 확장을 불가능하게 한다. 이럴 때는 객체 합성이 훨씬 더 유연한 확장 방법이 될 수 있다. Border 클래스의 인스턴스로 기존 글리프들을 장식하면 된다. 이 과정을 통해서 복합할 수 있는 두개의 후보가 생기게 된다.. 2020. 4. 10.
GoF의 디자인 패턴(Design Patterns: Elements of Reusable Object-Oriented Software) - 2장 사례 연구:문서 편집기 설계(2.3) [2.3 서식 설정] 편집기에서 문서 표현과 서식 설정은 완전히 다른 영역이다. 문서의 물리적 구조를 저장하는 능력이 서식에 맞는 특정 구조를 만들어 내는지를 알려주지는 않는다. 이런 부분은 거의 Lexi 구현자의 책임으로 돌아간다. 구현자는 텍스트를 라인으로 나누고 라인을 열로 구분하는 등 사용자의 수준 높은 기대에 부응해야 한다. Lexi의 서식 설정(formatting) 알고리즘은 이것을 모두 고려해서 만들어야 한다. [서식 설정 알고리즘의 캡슐화] 중요하게 고려할 사항은 서식 설정의 품질과 서식 설정에 필요한 속도를 어떻게 균형 있게 잘 맞추느냐 하는 것이다. 다시 말해, 문서가 화면에 표시되는 외양의 품질을 유지하면서 적정한 시간 안에 처리되어야 한다. 이러한 균형을 맞추려면 여러 가지 요인들을.. 2020. 4. 9.
GoF의 디자인 패턴(Design Patterns: Elements of Reusable Object-Oriented Software) - 2장 사례 연구:문서 편집기 설계(2.1~2.2) [Chapter 2. 사례 연구: 문서 편집기 설계] WYSIWYG: What You See Is What You Get, 눈에 보이는 대로 출력됨 [2.1 설계 문제들] 1.문서 구조 : 문서의 내부를 어떻게 표현할 것인지 2.서식 설정 3.사용자 인터페이스 꾸미기 4.여러 룩앤필(look and feel) 표준의 지원 5.여러 윈도우 시스템의 지원 6.사용자 조작 7.철자 검사와 붙임표 처리 [2.2 문서 구조] 문서는 문자, 선, 다각형 등 기본적인 그래픽 요소를 단순히 배열한 것입니다. 이런 요소들을 통해서 문서의 전체 내용을 정의할 수 있게 된다. 인터페이스를 직관적이고 간단하게 만들어야 한다. 편집기의 내부 표현은 다음 항목들을 지원해야 한다. -문서의 물리적 구조 유지 기능 -문서를 시각적으.. 2020. 4. 8.
GoF의 디자인 패턴(Design Patterns: Elements of Reusable Object-Oriented Software) - 1장 서론(1.7~1.8) [1.7 디자인 패턴을 고르는 방법] -패턴이 어떻게 문제를 해결하는지 파악한다. -패턴의 의도 부분을 본다. -패턴들 간의 관련성을 파악한다. -비슷한 목적의 패턴들을 모아서 공부한다. -재설계의 원인을 파악한다. -설계에서 가변성을 가져야 하는 부분이 무엇인지 파악한다. [1.8 디자인 패턴 사용 방법] 1.전체를 훑는 기분으로 끝까지 한 번 읽는다. 2.다시 처음으로 돌아가 ‘구조(Structure)’, ‘참여자(Participant)’, ‘협력 방법(Collaboration)’ 절을 다시 공부한다. 3.더 확실하게 이해하기 위해서 예제 코드 부분을 살핀다. 4.응용프로그램에 의미 있는 이름으로 패턴의 참여자 이름을 결정한다. 5.클래스를 정의한다. 6.패턴에 정의한 연산에 대해서 응용프로그램에 적.. 2020. 4. 7.
GoF의 디자인 패턴(Design Patterns: Elements of Reusable Object-Oriented Software) - 1장 서론(1.6) [응용 프로그램] 내부 재사용, 유지보수성 및 확장성 [툴킷(toolkit)] 툴킷이란 일반적은 목적의 유용한 기능을 제공하는 재사용 가능한 클래스들의 집합체. 툴킷은 코드 재사용을 강조한 것으로 서브루틴 라이브러리와 동일한 객체지향 라이브러리인 셈이다. [프레임워크(framework)] 프레임워크는 특정한 부류의 소프트웨어에 재사용성을 부여하여 개발할 수 있도록 만들어 주는 관련 클래스들의 집합이다. 프레임워크의 재정의란 프레임워크에 정의한 클래스를 상속받아 특정 응용프로그램을 지원하는 서브클래스를 정의하는 것을 뜻한다. 프레임워크는 응용프로그램에 대한 뼈대를 제공한다. 즉, 프레임워크는 클래스와 객체들의 분할, 전체 구조, 클래스와 객체들 간의 상호작용, 객체와 클래스 조합 방법, 제어 흐름에 대해 .. 2020. 4. 6.
GoF의 디자인 패턴(Design Patterns: Elements of Reusable Object-Oriented Software) - 1장 서론(1.6) [재사용을 실현 가능한 것으로] [상속 대 합성] 객체지향 시스템에서 기능의 재사용을 위해 구사하는 가장 대표적인 기법은 클래스 상속, 그리고 객체 합성(object compostion)이다. 서브클래싱에 의한 재사용을 화이트박스 재사용(white-box reuse). 상속을 받으면 부모 클래스의 내부가 서브클래스에 공개되기 때문에 화이트박스 객체 합성은 클래스 상속에 대한 대안이다. 다른 객체를 여러 개 붙여서 새로운 기능 혹은 객체를 구성하는 것이다. 객체를 합성하려면, 합성에 들어가는 객체들의 인터페이스를 명확하게 정의해 두어야 한다. 블랙박스 재사용(black-box reuse). 객체의 내부는 공개되지 않고 인터페이스를 통해서만 재사용되기 때문이다. 클래스 상속은 컴파일 시점에 정적으로 정의되고.. 2020. 4. 5.