SmalltalkBestPracticePatterns:PREFACE

From 흡혈양파의 번역工房
Jump to navigation Jump to search
서문(preface)

서문

본 서문은 본문에서 어떤 내용을 다룰 것인지를 설명한다. 독자는 서문을 통해 본 책의 구매를 결정지을 수 있을 것이다 (물론 구매를 하면 좋겠지만).


어떤 내용인가?

본 저서는 초보가 아닌, 숙련되고 성공한 스몰토커(Smalltalker)들이 실행하는 간단한 것들을 다룬다. 어떤 의미에서 보면 스타일 가이드라고 볼 수도 있다. 하지만 필자는 그 이상으로 들어가, 규칙 자체에만 중점을 두는 대신 규칙이 작용하도록 만드는 인간의 현실을 살펴보고자 시도했다.


해당하는 주제들은 프로그래밍의 일상적 방법들로, 다음과 같다:

  • 객체(object), 변수(variable), 메소드(method)의 이름을 선정하는 방법은?
  • 로직(logic)을 메소드로 나누는 방법은?
  • 코드를 통해 가장 명확하게 전달하는 방법은?


이는 작은 규모의 문제들이다. 이러한 문제들 외에도 프로젝트가 실패하는 더 큰 기술적 원인들도 많다 (그리고 비 기술적 원인은 그보다 더 많다).


이런 문제들의 매력은 다루기가 쉽다는 점이 된다. 좋은 이름을 고르는 데에는 프로그래밍 마법사보단 유용한 조언만으로 충분하다. 조언은 92가지 패턴으로 나뉜다. 각 패턴은 아래를 의미한다:

  • 계속 발생하는 일상적이 프로그래밍 문제;
  • 문제의 해결방법에 영향을 미치는 조건(tradeoffs)
  • 문제의 해결방법을 만드는 구체적인 방법.


예를 들어, "Role Suggesting Temporary Variable Name (기능을 제안하는 임시 변수 이름)"이란 패턴을 요약해보겠다:

문제: 임시 변수의 이름을 어떻게 정할 것인가?
조건(tradeoff):
  • 이름에 많은 정보를 포함하고 싶다.
  • 타이핑하기 쉽고, 포맷팅이 힘들지 않도록 가급적 짧은 이름이면 좋겠다.
  • 이름에 불필요한 정보가 포함되지 않아야 한다.
  • 변수가 왜 존재하는지 전달하고자 한다.
  • 변수의 타입(예: 어떤 메시지가 전송되었나)을 전달하고자 한다.
해결방법: 변수가 하는 역할을 이름에 넣어라. 타입은 컨텍스트에서 추론할 수 있으므로 굳이 이름에 포함시키지 않아도 된다.


본 저서 본문에서는 한 페이지 또는 두 페이지마다 각 패턴이 소개되어 있다. 각 패턴은 표준 스몰토크 이미지로부터의 예제(그리고 반례)를 포함한다. 해당하는 패턴과 관련된 패턴 또한 설명되어 있다.


패턴은 고립상태가 아니라 92개의 독립된 조언이다. 패턴은 공동으로 작용하므로 커다란 문제를 작은 문제로 줄여가도록 도와줄 것이다. 패턴들은 함께 작용 시 하나의 시스템 또는 언어를 형성한다. 시스템은 전체로서, 현재 닥친 문제에 초점을 두고 내일의 문제는 내일 해결할 수 있다는 확신을 준다.


이 책을 읽어야 하는 이유는 무엇인가?

학습 – 스몰토크를 막 배우기 시작했다면 여기 실린 패턴들은 효과적인 시스템의 사용을 위한 발판을 제공할 것이다. 패턴은 단순히 규칙이 아니기 때문에 패턴을 따르는 것부터 시작해 패턴의 모습이 왜 그러한지를 이해하고 자신만의 패턴을 만들어 내는 것까지 순조롭게 진행할 수 있다. 본 서적 외에도 스몰토크로의 기본 입문이 필요하지만, 입문 서적과 함께 이 책을 병행하여 읽는다면 학습을 가속화시킬 것이다.


프로그래밍 – 스몰토크를 이용해 프로그래밍할 경우, 이러한 패턴들은 잘 작동하는 기법들의 카탈로그를 제공할 것이다. 그리고 그 기법들 중 다수는 독자 스스로 발견하거나 개발해야 하지만, 이것이 어떻게 해서 작용하는지에 대한 신선한 관점을 제공하고 이전에 고려하지 않았던 미묘한 차이를 제시할 수도 있다.


교육 – 멘토 또는 학급훈련에서 스몰토커들을 교육하는 경우, 이러한 패턴들은 엄청난 교육용 자료가 된다. 코드가 왜 달라야 하는지 설명하기 위해서는 패턴에 대해 먼저 논하고 특정 상황에서 그러한 패턴이 어떻게 적용되는지를 의논하는 것이 자신에게, 그리고 학습자에게 만족스러운 결과를 가져다줄 것이다.


관리 – 스몰토크 프로젝트를 관리하는 경우, 괜찮은 소프트웨어 공학 원리를 어떻게 스몰토크에 적용할 것인지 궁리하는 이가 있을 것이다. 책에 실린 패턴들이 그러한 주제를 직접 강조하는 건 아니지만 개발자들에게 공통 어휘의 기본이 될 수 있다.


이 책에서 다루지 않는 내용은?

이 책은 방법론에 관한 책이 아니다. 따라서 전반적인 개발 프로세스를 안내하진 않을 것이다. 자신이 개발하였거나 본 저서를 이용해 만든 기존의 프로세스에 본 저서 내용을 접목하여 사용하면 될 것이다. 이 책은 자신에게 맞는 코드의 생성을 다룬다.


이 책은 철학에 관한 책이 아니다. 무엇이 프로그램을 훌륭하게 만드는지를 개략적으로 이해하고 싶거나, 스스로 패턴을 작성하는 방법을 배우고 싶거나, 그러한 패턴들의 철학적 또는 심리적 기반을 이해하고 싶다면 이 책은 바람직하지 못하다. 본 저서는 작성할 프로그램이 있고, 그것을 가능한 빠르게, 안전하게, 효과적으로 작성하고자 하는 이들을 위한 책이다.


이 책은 디자인에 관한 책이 아니다. 디자인이 객체의 작은 가족(family)들 간 관계를 정의하는 과정이라면, 최종적 문제는 구현 문제와 마찬가지로 틀림없이 반복될 것이다. 디자인 패턴은 공통성을 파악하는 데 매우 효과적이다. 단, 본 저서의 주제가 아닐 뿐이다. 이 책은 스몰토크를 자신에게 맞도록 만드는 것과 관련된다. 객체를 자신에게 맞도록 만드는 것과는 전혀 다른 주제다.


감사의 말

이 책을 펴는 데에 기여한 많은 분들에게 감사의 말을 전하고 싶다. 가장 먼저 Xeros PARC Learning Research Group (Alan Kay, Adele Goldberg, Dan ingalls, Din Merry-Shapiro, Ted Kaehler, Larry Tesler, Bob Flegel)에게 처음부터 통찰력을 제공하여 책을 펴낼 수 있는 내용을 제공해준 데 감사하다. 나의 멘토이자 지적인 파트너, Ward Cunningham에겐 길을 알려주고 그의 통찰력을 공유해준 데 대해 고마움을 전한다. 여기 실린 다수의 패턴은 그가 발견하고 이름을 정한 것이다. 그리고 다듬어지지 않은 초안을 주의 깊게 읽어준 검토자들에게도 (Dirk Riehle, David N. Smith, Mitchell Model, Bill Reynolds, Dave Smith, Trygve Reenskaug, Ralph Johnson, John Brant, Don Roberts, Brian Foote, Brian Marick Joe Yoder, Ian Chai, Mark Kendrat, Eric Scouten, Charles Herring, Haidong Ye, Kevin Powell, Rob Brown, Kyle Brown, Bobby Woolf, Harald Mueller, Steve Hayes, Bob Biros, David Warren, Gert Florijn, Mark L. Fussell, Martin Fowler, Chuck Siska, Chris Bird, Ron Jefferies, Volker Wurst, Peter Epstein, Thomas Murphy, Michel Brassard, Ron Jefferies, John Sellers, Steve Messick, Darrow Kirkpatrick, Phoenix Tong, Doug Lea, Randy Stafford, Sharry Fealk를 비롯해 주석에 이름을 기입하지 않은 검토자들 모두) 감사함을 전하고 싶다. 마지막으로, 이따금씩 재촉하면서 인내심을 갖고 기다려준 편집장, Paul Becker가 없었다면 이 책도 없었을 것이다.


Notes