SqueakByExample:9.3
9.3 컬렉션의 실행 (Implementations of collections)
기능에 의한 이 범주화들은 우리의 유일한 관심이 아니며, 우리는 반드시 컬렉션 클래스들이 어떻게 실행되는지를 반드시 고려해야만 합니다. 그림 9.4에서 보이는 것 처럼, 5개의 실행 기술들이 차용되었습니다.
- 배열들은 그것들의 구성요소들을 컬렉션 오브젝트 자신의 색인가능(indexable) 인스턴스 변수들에 저장하며, 결과로서의 배열들은 반드시 고정되어야 하지만, 단일 메모리 배치와 (a single memory allocation)함께 만들어 질 수 있습니다.
- OrderedCollections와 SortedCollections는 그것들의 구성요소들을 컬렉션의 인스턴스 변수들중의 하나로 참조되는 배열 속에 저장합니다. 결과적으로, 내부 배열(the internal array)은 만약 컬렉션이 그것의 저장 용량을 넘어서서 커진다면, 더 큰 것으로 대체될 수 있습니다.
- 다양한 종류의 세트와 딕셔너리의 종류들 또한 저장(storage)장소를 위해 부차적인 배열(subsidiary array)을 참조하지만, hash table로서 배열(array)을 사용합니다. Bags는 키(keys)로서 bag의 구성요소들과 값(values)으로서 여러 개의 occurrence와 함께 부차적인 사전(subsidiary dictionary)을 사용합니다.
- LinkedLists는 표준 단일 링크 표현(a standard singly-linked representation)을 사용합니다.
- 인터벌은(Intervals) 두 개의 끝점(endpoints)가 스텝크기(step size)를 기록하는 3 개의 정수들에 의해 표현됩니다.
이 클래스들 뿐만 아니라, Array, Set 그리고 다양한 종류의 딕셔너리들이 있습니다. 이 컬렉션들은 그것들의 구성요소 위에 약하게 보유됩니다. 예를 들면, 구성요소들이 가비지 수집(garbage collected)이 되는 것을 막지 않는 방식입니다. 스퀵 가상 머신(The Squeak virtual machine)은 이 클래스들을 알고 있으며, 특별하게 취급(handle)합니다.
리더(Readers)는 스몰토크 컬렉션들이 LaLonde와 Phgh의 훌륭한책[1]을 좀더 참조한다는 것에 관한 학습에 흥미를 갖고 있습니다.
Notes
- ↑ Wilf LaLonde and John Pugh, Inside Smalltalk: Volume 1. Prentice Hall, 1990, ISBN 0–13– 468414–1.