SqueakByExample:9.3

From 흡혈양파의 번역工房
Jump to navigation Jump to search

컬렉션의 구현

기능에 의한 분류만이 관심이 되는건 아닙니다; 어떻게 콜렉션 클래스를 구현하는가에 대해서도 고려해야 하죠. 그림 9.4 의 내용처럼 구현에 사용되는 주요기술은 5가지가 있습니다.

그림 9.4: 실행 테크닉에 의해 범주화된 몇 가지 컬렉션 클래스들
  1. 배열은, 컬렉션 객체 자신(index가능)의 인스턴스 변수에 요소를 수용합니다; 결과적으로 배열의 사이즈는 고정되며, 그 대신에 배열은 한번의 메모리 할당만으로 생성이 가능합니다.
  2. OrderedCollections 과 SortedCollections 는 요소를 배열에 수용하며 인스턴스 변수로 해당되는 배열을 참조합니다. 이렇게 함으로서 내부 배열의 사이즈보다 컬렉션이 커지면 보다 큰 배열로 교체가 가능합니다.
  3. Set 과 Dictionary 같은 종류들도 저장장소를 위한 부가적인 배열을 참조합니다만, 이 배열을 참조할때는 해시테이블로 사용합니다. Bag 은 내부의 요소를 Key 로 하고 발생회수를 값으로 하며 두가지를 한쌍으로 취급하는 Dictionary 를 보조로 사용합니다.
  4. LinkedLists는 표준적 singly-linked 형식을 사용합니다.
  5. Interval 은 두개의 끝점 및 단계의 크기를 나타내는 3 개의 정수를 수용합니다.


이 외에도 Array 의 변종인 "WEEK" 및 Set 과 다양한 종류의 dictionary 들이 있습니다. 이런 컬렉션들은 요소를 "약하게" 보관합니다. 예를들면 보관하는 요소들에 대한 가비지컬렉션을 별도로 막지 않는 정도가 되겠군요. 스퀵 가상머신은 이런 클래스들을 이미 알고 있으며, 특별하게 취급합니다.

스몰토크 컬렉션들에 대해 좀 더 자세히 알고싶다면 LaLonde 와 Pugh 의 훌륭한 책[1]을 참고해주시기 바랍니다.


Notes

  1. Wilf LaLonde and John Pugh, Inside Smalltalk: Volume 1. Prentice Hall, 1990, ISBN 0–13–468414–1.