DesignPatternSmalltalkCompanion:1.4: Difference between revisions
Onionmixer (talk | contribs) (검수 20180724) |
Onionmixer (talk | contribs) m (단어수정) |
||
Line 11: | Line 11: | ||
* '''의도<sup>intent</sup>''' 단락에서는 가끔씩 다른 말로 변경한 부분이 있지만, [디자인 패턴] 본문을 그대로 발췌하였다. | * '''의도<sup>intent</sup>''' 단락에서는 가끔씩 다른 말로 변경한 부분이 있지만, [디자인 패턴] 본문을 그대로 발췌하였다. | ||
* 패턴의 '''구조<sup>Structure</sup>''' 다이어그램. 대부분 '''디자인 패턴''' 다이어그램과는 다르다. 더 명확한 설명을 위해 많은 구조 다이어그램을 수정했으며, Class 객체 등 Smalltalk 에 요구되는 객체를 포함하거나, C++ 의 구현과 패턴에 대한 Smalltalk 버전을 반영하고자 하였다. 구조적으로는 동일할지 몰라도 C++ 가 아닌 Smalltalk 구문과 의미론을 반영한다. | * 패턴의 '''구조<sup>Structure</sup>''' 다이어그램. 대부분 '''디자인 패턴''' 다이어그램과는 다르다. 더 명확한 설명을 위해 많은 구조 다이어그램을 수정했으며, Class 객체 등 Smalltalk 에 요구되는 객체를 포함하거나, C++ 의 구현과 패턴에 대한 Smalltalk 버전을 반영하고자 하였다. 구조적으로는 동일할지 몰라도 C++ 가 아닌 Smalltalk 구문과 의미론을 반영한다. | ||
* '''논의<sup>Discussion</sup>''' 부분에서는 패턴의 동기, Smalltalk 버전과 C++ | * '''논의<sup>Discussion</sup>''' 부분에서는 패턴의 동기, Smalltalk 버전과 C++ 해석의 차이, 패턴의 장단점, 패턴을 적용하려 할때 고민해야할 일반적인 사항들과 같은 주제들을 다룬다. 이 부분은 크리스토퍼 알렉산더의 패턴처럼 일반적인 설명으로 구성된다 (Alexander et al., 1977). | ||
* '''협력<sup>Collaborations</sup>''' 및 '''활용성<sup>Applicability</sup>''' 단락은 선택적이며, 때로는 논의 부분에서 다뤄지기도 한다. | * '''협력<sup>Collaborations</sup>''' 및 '''활용성<sup>Applicability</sup>''' 단락은 선택적이며, 때로는 논의 부분에서 다뤄지기도 한다. | ||
* '''구현<sup>Implementation</sup>''', Smalltalk 또는 일반적으로 패턴을 구현할때에 대한 관련 주제들을 다룬다. | * '''구현<sup>Implementation</sup>''', Smalltalk 또는 일반적으로 패턴을 구현할때에 대한 관련 주제들을 다룬다. |
Latest revision as of 08:26, 24 July 2018
1.4 패턴에 대한 논의
GoF 와 여기서 논의하는 패턴들은 특정 수준의 추상화를 가지고 있다. 일반적으로 패턴은 마이크로에서 매크로에 이르는 넓은 범위의 객체 지향 응용 프로그램에서 다양한 수준의 세분성 및 추상화 수준에서 발생할 수 있다. 메서드의 변수에 어떤 이름을 붙일것 인지, 지연 초기화를 어떻게 구현할 것인지, 코드를 어떻게 형식화 시킬것인지와 저수준 문제들에 대한 규약등은 마이크로패턴으로 간주한다(Kent Beck의 Smalltalk Best Practice Pattern [1997b][1]에 나오는 패턴의 다수는 이 범주에 속한다). 그 반대로 VisualWorks 의 대화형 애플리케이션에 매우 중요한 아키텍처인 Model-View-Controller 프레임워크는 매크로패턴에 속한다. Buschmann et al.(1996)은 전체적으로 패턴은 용어 부터 디자인 패턴까지, 그리고 아키텍처 패턴 까지 다양하다고 주장한다. 여기서의 디자인 패턴들은 핵심 분야에 중점을 둔다. 이 패턴들은 잘 설계되고 프로그램화된 애플리케이션들에게 유용한 마이크로 아키텍처의 구조와 구현을 설명한다.
디자인 패턴 에서와 마찬가지로 이 책은 생성 패턴, 구조 패턴, 행동 패턴의 세 장으로 구성된다. 생성 패턴에서는 객체의 생성 과정을 다룬다. 구조 패턴의 경우, 구조의 컴포넌트 기능성을 효율적으로 향상시키기 위해 객체를 좀 더 복잡한 구조로 구성하게 한다. 행동 패턴에서는 시스템의 기능적 행위, 객체가 목표를 달성하기 위한 의사소통, 협력, 책임의 분산 방법을 다룬다.
다음으로는 패턴의 범위scope에 따라 패턴 이름을 제목으로 분류해서, 각 패턴을 주로 클래스에 적용하는지, 아니면 인스턴스에 적용하는지를 상세하게 다룬다. Class 패턴은 상속을 통해 설정된 클래스 간의 정적 관계에 중점을 둔다. Object 패턴은 인스턴스들 간 동적 런타임 관계를 포함한다. 예를 들어, Template Method 패턴은 상속과 메서드 재정의를 통해 구현되므로 클래스 동작으로 분류된다. 상위클래스는 하나 또는 그 이상의 이차 메서드를 호출하는 넓은 범위의 메서드를 정의하며, 하위클래스는 그에 종속된 메서드 일부 또는 전부를 오버라이드할 수 있다; 따라서 패턴의 컴포넌트는 모두 정적이며, 클래스를 기반으로 한다. Strategy 패턴은 객체 행위로 분류되는데, 그 이유는 Strategy 클래스의 정의에 종속을 포함하고 있음에도 불구하고 객체 간 상호작용이 패턴의 주요 특성으로 포함되기 때문이다.
전체적인 구성은 동일하지만 이 책의 내용과 GoF 패턴의 형식이 완전히 중복되는 것은 아니다. 그렇다고 완전히 새로운 패턴을 작성하는 것도 아니며, GoF 가 이미 사용한 패턴들이다. 대신 이러한 패턴들에 대한 Smalltalk 버전을 제시하는 것이 우리의 목적이다. 따라서 GoF 패턴에 사용된 모든 하위단락이 필요한 것은 아니다. 이 책의 패턴은 다음과 같이 변하기 쉬운 내용을 싣고 있다.
- 의도intent 단락에서는 가끔씩 다른 말로 변경한 부분이 있지만, [디자인 패턴] 본문을 그대로 발췌하였다.
- 패턴의 구조Structure 다이어그램. 대부분 디자인 패턴 다이어그램과는 다르다. 더 명확한 설명을 위해 많은 구조 다이어그램을 수정했으며, Class 객체 등 Smalltalk 에 요구되는 객체를 포함하거나, C++ 의 구현과 패턴에 대한 Smalltalk 버전을 반영하고자 하였다. 구조적으로는 동일할지 몰라도 C++ 가 아닌 Smalltalk 구문과 의미론을 반영한다.
- 논의Discussion 부분에서는 패턴의 동기, Smalltalk 버전과 C++ 해석의 차이, 패턴의 장단점, 패턴을 적용하려 할때 고민해야할 일반적인 사항들과 같은 주제들을 다룬다. 이 부분은 크리스토퍼 알렉산더의 패턴처럼 일반적인 설명으로 구성된다 (Alexander et al., 1977).
- 협력Collaborations 및 활용성Applicability 단락은 선택적이며, 때로는 논의 부분에서 다뤄지기도 한다.
- 구현Implementation, Smalltalk 또는 일반적으로 패턴을 구현할때에 대한 관련 주제들을 다룬다.
- 예제 코드Sample Code 에서는 패턴을 사용하는 Smalltalk 코드를 제공한다. 가끔 내용이나 흐름상 적절한 상황이라면, 구현과 예제 코드를 하나의 단락으로 끼워 넣기도 한다.
- 알려진 Smalltalk 사용예Known Smalltalk Uses. 본 저서는 Smalltalk Companion 이기 때문에 디자인 패턴을 사용하는 Smalltalk 애플리케이션 및 Smalltalk 라이브러리 클래스만 제시하는 것이 옳다고 판단하였다.
- 관련 패턴Related Patterns. 이 부분은 선택적이다. 디자인 패턴에 언급된 내용으로 충분한 경우라면, 이 단락은 없다.