SmalltalkBestPracticePatterns:5.1

From 흡혈양파의 번역工房
Jump to navigation Jump to search
The printable version is no longer supported and may have rendering errors. Please update your browser bookmarks and please use the default browser print function instead.
5.1 컬렉션(collections)

컬렉션 계층구조는 스몰토크의 위대한 강점들 중 하나이다. 다른 언어에서는 여러 번 지루하게 반복해서 써야 하는 코드가 스몰토크에서는 하나의 단어로 가능하다. 그렇지만 컬렉션은 동일한 프로토콜에 대부분 반응하기 때문에 그 결과는 더 유연하며, "OrderedCollection" 대신 "Set"로 대체함으로써 선형 리스트를 해시 테이블(hash table)로 변환할 수 있다.


단점은 컬렉션 클래스로 인해 스몰토크를 숙달하기까지 더 많은 내용을 학습해야 한다는 점이다. 좋은 소식은 프로토콜의 어떤 조각도 복잡하거나 배우기가 어렵지 않고, 더 간단하고 빠르며 유지가 쉬운 동시에 유연한 코드를 생산해낸다는 점이다.


단, 컬렉션 클래스가 많다는 가장 큰 단점이 있다. 초보 프로그래머들은 자신들이 이용할 수 있는 클래스와 메시지를 극히 일부만 학습하고, 그 외에 필요로 하는 기능은 절차적 프로그래밍에서 남은 기술들에 의존하는 것이 보통이다. 그 결과, 코드는 필요량보다 훨씬 커지고, 숙련된 스몰토커들이 읽기가 힘든, 오류가 발생하기 쉬운 코드를 생산하게 된다.


예를 들어, 초보자 스몰토크의 코드에선 반복에 대해 직접 코딩한 루프(hand coded loops)를 발견하기가 쉽다. 아래 코드는:

| index |
index := 1.
[index <= aCollection size] whileTrue:
    [...aCollection at: index...
    index := index + 1]


아래에 비해 작성하기도 힘들고 읽기도 까다로울 뿐 아니라 유연성도 떨어진다:

aCollection do: [:each | ...each...]


첫 번째 코드는 인덱스된(indexed) 컬렉션을 이용할 때만 작동하지만 두 번째는 Sets와 Dictionaries에서도 작동할 것이다.


코드를 검토하면서 필자는 컬렉션 프로토콜을 전력으로 이용하여 4개~6개 행으로 이루어진 표현식을 하나의 행으로 변형할 수 있는 기회를 발견하곤 한다.


컬렉션에 관한 본 책의 논의는 세 가지 부분으로 나뉜다:

  • 클래스 – 컬렉션을 사용하고 싶다면 가장 먼저 결정해야 할 것은 “어떤 것”을 정하는 일이다. 해당 절은 각 주요 컬렉션 클래스가 해결하는 문제를 설명한다.
  • 프로토콜 – 다른 언어들로부터 이행되던 프로그래밍 습관들이 컬렉션을 이용 시에는 효과를 감소시킬 수 있다. 해당 절은 당신이 컬렉션으로 전송할 수 있는 주요 메시지와 각 컬렉션이 어떠한 문제를 해결하는지를 설명한다.
  • 관용구(Idiom) - 컬렉션은 너무나 강력하기 때문에 숙련된 스몰토커들이 활용하는 몇 가지 표준 기법 집합이 있다. 이러한 관용구 중 하나를 사용하는 코드를 읽고 있다면 처음엔 깜짝 놀랄 것이다. 해당 절은 컬렉션을 특이한 방식으로 사용하여 해결할 수 있는 문제를 소개한다.


Notes