DesignPatternSmalltalkCompanion:1.2
1.2 왜 Smalltalk Companion 인가?
크리스토퍼 알렉산더(Christopher Alexander)와 그의 동료들은 생활 공간과 작업 공간ㅡ가정, 건물, 공동체 지역, 시내ㅡ에서의 디자인 패턴의 사용에 관해 방대한 양의 글을 썼다. 그들의 연구는 소프트웨어 디자인 패턴에 대한 개념을 가능하도록 영감을 준 것으로 여겨진다. Alexander 는 The Timeless Way of Building (1979)에서 "서로 다른 문화마다 동일한 패턴이지만 약간씩 다른 버전이 존재하기도 한다" 고 주장했다 (p. 276). C++ 과 Smalltalk 은 언어, 환경, 문화가 모두 다르다ㅡ두 언어 모두 동일한 기본 패턴을 사용할 수는 있으나 경무마다 서로 다른 버전을 사용할 것이다.
GoF 의 디자인 패턴 은 C++ 관점에서 본 설계 문제들과 해법들을 제시한다. 그 책은 대부분을 C++ 코드를 사용해서 패턴을 설명하며, C++ 구현과 밀접한 관련이 있는 문제들을 고민한다. 이러한 문제들은 C++ 개발자들에게는 중요하지만, 다른 언어를 사용하는 개발자들에게 이러한 패턴의 이해와 적용은 어렵다.
본 서적은 디자인 패턴 의 자매편으로 만들어졌지만 스몰토크의 관점에서 작성되었다. 따라서 Smalltalk Companion은 한 가지 주제에 대한 변형체로 보는 것도 괜찮겠다. 우리는 GoF 저서와 동일한 패턴을 제공하지만 스몰토크의 안경을 통한 관점을 제공하는 것이다. (사실 Smalltalk Companion에 대한 명칭을 생각하던 중 누군가 “DesignPatterns asSmalltalk”를 권했는데 스몰토크를 사랑하는 사람들만 이해할 것이란 결론을 내렸다.)
하지만 Smalltalk Companion은 디자인 패턴 본문을 단순히 베껴 C++ 가 나타날 때마다 스몰토크의 예제를 끼워 넣는 작업에 그치는 것이 아니다. 저자들은 원본 패턴을 Smalltalk 의 관점에서 토론하고 설명하였다. 그에 따라 추가 분석, 해설, 심지어 원본 패턴과 상충되는 내용의 필요성을 느끼는 상황이 상당히 많았다. 따라서 우리의 토론 대다수는 다른 객체지향 언어에도 적용 가능하게 되었다.
물론 Smalltalk 에 사용되는 상당히 많은 예제 코드도 제공한다. 대부분의 경우 우리가 제시한 예제는 디자인 패턴 예제를 스몰토크 버전화시킨 것이 아니다. C++ 예제를 단순히 번역하기보다는 대안적 방법이 더 유용하다고 생각했다.
디자인 패턴의 보충자료로서의 Smalltalk Companion의 목표를 간략히 소개하겠다.
- GoF 의 디자인 패턴에 대한 Smalltalk 구현에 한정된 문제의 토론
- 훨씬 더 많은 Smalltalk 예제 코드
- 더 많아진 Smalltalk 의 사용 사례, 특히 주요 Smalltalk 환경의 클래스 라이브러리에서 얻은 사례
- 패턴을 Smalltalk 구현하고 일반적으로 구현할 수 있는 변형체(variation) 알아보기
- 애플리케이션 영역(보험, 텔레커뮤니케이션 등)과 시스템 개발(윈도잉 시스템, 컴플라이어 등) 환경으로부터 얻은 새로운 예제