SqueakByExample:9.3: Difference between revisions

From 흡혈양파의 번역工房
Jump to navigation Jump to search
(SBE 컬렉션의실행 페이지 추가)
 
(번역수정)
 
(One intermediate revision by the same user not shown)
Line 1: Line 1:
9.3 컬렉션의 실행 (Implementations of collections)
==컬렉션의 구현==




[[image:CollectionsByImpl.png|none|1078px|thumb|그림 9.4: 실행 테크닉에 의해 범주화된 몇몇 컬렉션 클래스들]]
기능에 의한 분류만이 관심이 되는건 아닙니다; 어떻게 콜렉션 클래스를 구현하는가에 대해서도 고려해야 하죠. 그림 9.4 의 내용처럼 구현에 사용되는 주요기술은 5가지가 있습니다.


[[image:CollectionsByImpl.png|none|1078px|thumb|그림 9.4: 실행 테크닉에 의해 범주화된 몇 가지 컬렉션 클래스들]]


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


# 배열들은 그것들의 구성요소들을 컬렉션 오브젝트 자신의 색인가능(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)합니다.
외에도 Array 의 변종인 "WEEK" 및 Set 다양한 종류의 dictionary 들이 있습니다. 이런 컬렉션들은 요소를 "약하게" 보관합니다. 예를들면 보관하는 요소들에 대한 가비지컬렉션을 별도로 막지 않는 정도가 되겠군요. 스퀵 가상머신은 이런 클래스들을 이미 알고 있으며, 특별하게 취급합니다.
 
스몰토크 컬렉션들에 대해 좀 더 자세히 알고싶다면 LaLonde 와 Pugh 의 훌륭한 책<ref name="주석9-3">Wilf LaLonde and John Pugh, Inside Smalltalk: Volume 1. Prentice Hall, 1990, ISBN 0–13–468414–1.</ref>을 참고해주시기 바랍니다.
 


리더(Readers)는 스몰토크 컬렉션들이 LaLonde와 Phgh의 훌륭한책<ref name="주석9-3">Wilf LaLonde and John Pugh, Inside Smalltalk: Volume 1. Prentice Hall, 1990, ISBN 0–13–
468414–1.</ref>을 좀더 참조한다는 것에 관한 학습에 흥미를 갖고 있습니다.


==Notes==
==Notes==

Latest revision as of 04:20, 9 September 2013

컬렉션의 구현

기능에 의한 분류만이 관심이 되는건 아닙니다; 어떻게 콜렉션 클래스를 구현하는가에 대해서도 고려해야 하죠. 그림 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.