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