SqueakByExample:9.7
9장 요약
스몰토크의 컬렉션 계층은, 다양한 종류의 컬렉션을 동일하게 조작하기 위한 공통의 어휘를 가지고 있습니다.
- 컬렉션에서 볼 수 있는 가장 큰 차이는, SequenceableCollections 은 주어진 순서에 따라 요소들을 보관하는것에 비해, Dictionary 및 Dictionay 의 서브클래스들은 Key-Value 의 연관 쌍을 보관하며, Sets 와 Bags 는 다루는 요소의 순서에 대한 규칙을 가지지 않는다는 점입니다.
- 컬렉션에 메시지 asArray, asOrderedCollection 를 발송함으로써 대부분의 컬렉션들을 다른 종류의 컬렉션으로 변환할 수 있습니다.
- 컬렉션을 정렬하기 위해서는, 정렬을 원하는 컬렉션에 asSortedCollection 을 발송합니다.
- 리터럴의 Array 는 #(...) 같은 특별한 문법으로 만들 수 있습니다. 동적 Array 는 {...} 문법으로 만들수 있습니다.
- Dictionary는 key 를 비교할때 동치성(equality)을 사용합니다. String 의 인스턴스를 Key 로 사용할때 가장 유용합니다. 그대신 IdentityDictionary 는 객체의 동일성(object identity)으로 key 를 판단합니다. 이것은 key 로 Symbol 을 시용하거나, 객체의 참조를 값에 대입할때 적합합니다.
- String 은 일반적인 컬렉션 메시지의 처리가 가능합니다. 게다가, String 은 Pattrern-Matching 의 기본적인 형태도 지원합니다. 좀더 진보된 프로그램에는, 일반적인 matching 대신 RegEx package 를 사용하면 됩니다.
- 기본적인 반복자 메시지는 do: 입니다. 이 메시지는 컬렉션의 요소를 수정하거나, 각 요소에 같은 메시지를 발송하는 작업에 대한 코드등에 유용하게 사용될 수 있습니다.
- 사실 do: 메서드 대신, 동일한 방식의 처리를 위해 collect:, select:, reject:,includes:, inject:into: 및 그외의 고수준인 메시지를 사용하는 것이 좀 더 일반적입니다.
- 반복을 수행하고 있는 컬렉션의 요소를 절대로 제거하지 마십시오. 만약 컬렉션의 요소를 수정하셔야 한다면, 요소를 다른 객체로 복사한다음 수정해야 합니다.
- 만약 = 메서드를 재지정해야 한다면 hash 메서드 또한 재지정해야 한다는걸 기억하시기 바랍니다.