GnuSmalltalkUsersGuide:BaseChapter 036
- Collection
Collection
네임스페이스 Smalltalk에 정의됨
슈퍼클래스: Iterable
범주: 컬렉션
- 나는 추상 클래스다. 나의 인스턴스들은 객체의 컬렉션들이다. 나의 서브클래스들은 약간의 제약을 가하거나 객체가 어떻게 보관 또는 조직되는지에 대한 일부 정의를 발견할 수도 있다; 나는 이에 대해 어떤 말도 하지 않는다. 단순히 객체의 일반 컬렉션을 위해 객체 생성 및 접근 루틴을 몇 가지 제공할 뿐이다.
Collection 클래스: 인스턴스 생성
from: anArray
anArray를 수신자의 인스턴스로 변환하라. anArray는 중괄호 구문을 이용해, 어쩌면 추가 구조를 anArray를 부과함으로써 인스턴스를 편하고 완전하게 명시할 수 있도록 구조화된다.
join: aCollection
aCollection 내 모든 요소를 새 인스턴스에 추가될 'withAll:' 인자 컬렉션으로 취급하여 형성된 컬렉션을 응답하라.
with: anObject
anObject를 유일한 요소로 가진 컬렉션을 응답하라.
with: firstObject with: secondObject
전달된 순서로 된 매개변수를 유일한 요소로 가진 컬렉션을 응답하라.
with: firstObject with: secondObject with: thirdObject
전달된 순서로 된 매개변수를 유일한 요소로 가진 컬렉션을 응답하라.
with: firstObject with: secondObject with: thirdObject with: fourthObject
전달된 순서로 된 매개변수를 유일한 요소로 가진 컬렉션을 응답하라.
with: firstObject with: secondObject with: thirdObject with: fourthObject with: fifthObject
전달된 순서로 된 매개변수를 유일한 요소로 가진 컬렉션을 응답하라.
withAll: aCollection
요소들이 aCollection 내에 있는 요소들에 해당하는 컬렉션을 응답하라.
Collection 클래스: 멀티바이트 인코딩
isUnicode
true를 응답하라; 수신자는 임시 Unicode 문자를 보관할 수 있다.
Collection: 추가하기
add: newObject
newObject 를 수신자에게 추가하고 그것을 응답하라.
addAll: aCollection
'aCollection'의 모든 요소를 수신자에게 추가하고 aCollection을 응답하라.
Collection: 연결하기
join
내 첫번째 요소처럼, 컬렉션이어야 하는 나의 모든 요소들의 모든 요소들과 함께 (순서대로) 나의 첫 번째 요소와 같이 새 컬렉션을 응답하라.
나는 myself 대신 나의 첫 번째 요소를 프로토타입으로 사용하는데, 그 이유는 나의 요소들이 나보다 더 바람직한 프로퍼티들을 더 잘 공유하기 때문이다. 예를 들자면 다음과 같다:
- #('hello, ' 'world') join => 'hello, world'
Collection: 변환하기
asArray
수신자 내의 모든 요소를 포함하는 Array를 응답하라.
asBag
수신자 내의 모든 요소를 포함하는 Bag를 응답하라.
asByteArray
수신자 내의 모든 요소를 포함하는 byteArray를 응답하라.
asOrderedCollection
수신자 내의 모든 요소를 포함하는 OrderedCollection을 응답하라.
asRunArray
RunArray로 변환된 수신자를 응답하라. 수신자가 정렬되지 않은 경우 RunArray 내에서 요소의 정렬은 #do: 순이 아닐 수 있다.
asSet
수신자 내의 모든 요소를 중복내용 없이 포함하는 Set를 응답하라.
asSortedCollection
기본 정렬 블록-[ :a :b | a <= b ]-으로 수신자 내의 모든 요소를 포함하는 SortedCollection을 응답하라.
asSortedCollection: aBlock
정렬 블록 aBlock에 따라 정렬된 수신자의 요소를 요소로 가진 SortedCollection을 응답하라.
asString
수신자 내의 모든 요소를 포함하는 String을 응답하라.
asUnicodeString
수신자 내의 모든 요소를 포함하는 UnicodeString을 응답하라.
Collection: 컬렉션 복사하기
copyReplacing: targetObject withObject: newObject
= to targetObject 인 각 객체를 newObject로 대체하여 복사하라.
copyWith: newElement
newElement가 추가된 수신자의 복사본을 응답하라.
copyWithout: oldElement
oldElement의 모든 발생이 제거된 수신자의 복사본을 응답하라.
Collection: 열거
anyOne
명시되지 않은 컬렉션의 요소를 응답하라.
beConsistent
해당 메서드는 private하지만 꽤 흥미로운 메서드이므로 문서화한다. 이는 컬렉션에 반복을 시도하기 전에 컬렉션이 일관된 상태에 있도록 확보한다; 이것이 존재하면 실행을 여러 번 분할하여 실행을 시도하는 컬렉션이 필요로 하는 오버라이드 수를 감소시킨다. 기본 구현은 아무 일도 하지 않으므로 가상 머신에 의해 최적화되고 성능 측면에서 손해보는 바는 미비하다. #do: 는 Collection 에서 추상적이기 때문에 Collection의 자손들은 이를 명시적으로 호출함을 주목하라.
collect: aBlock
aBlock을 평가하여 수신자의 각 요소를 전달하는 결과를 모두 포함하는 Collection의 새 인스턴스를 응답하라.
gather: aBlock
aBlock을 평가한 모든 결과를 포함하는 Collection의 새 인스턴스를 응답하라. aBlock은 컬렉션을 리턴해야 한다. 결과는 aBlock이 (#join의 경우) 리턴하는 첫 번째 컬렉션과 동일한 유형이다.
readStream
수신자의 요소를 제공하는 스트림을 응답하라.
reject: aBlock
aBlock으로 전달 시 true를 응답하지 않는 수신자 내의 모든 요소를 포함하는 Collection의 새 인스턴스를 응답하라.
select: aBlock
aBlock으로 전달 시 true를 응답하는 수신자 내의 모든 요소를 포함하는 Collection의 새 인스턴스를 응답하라.
Collection: finalization
mourn: anObject
Private - anObject 가 취약 키(weak key)를 가진 것으로 발견되면 제거하고 어쩌면 키를 finalize할지도 모른다.
Collection: 인쇄하기
inspect
수신자 내의 모든 인스턴스 변수와 객체를 Transcript 상에 인쇄하라.
printOn: aStream
수신자의 표현을 aStream 상에 인쇄하라.
Collection: 제거하기
empty
수신자로부터 모든 것을 제거하라.
remove: oldObject
수신자로부터 oldObject를 제거하라. 찾을 수 없다면 실패하고, 그 외의 경우 oldObject를 응답하라.
remove: oldObject ifAbsent: anExceptionBlock
수신자로부터 oldObject를 제거하라. 찾을 수 없다면 anExceptionBlock을 평가하고 결과를 응답하고, 그 외의 경우 oldObject를 응답하라.
removeAll: aCollection
aCollection 내에서 각 객체를 제거하고 aCollection을 응답하고, 일부라도 없으면 실패한다. 경고: 이는 컬렉션을 절반만 업데이트된 상태로 남겨둘 수 있다.
removeAll: aCollection ifAbsent: aBlock
aCollection 내에서 각 객체를 제거하고 aCollection을 응답하라; 일부 요소를 찾을 수 없다면 aBlock로 전달하라.
removeAllSuchThat: aBlock
aBlock이 true를 리턴하는 모든 객체를 수신자로부터 제거하라.
Collection: 보관하기
storeOn: aStream
수신자로 컴파일하는 스몰토크 코드를 aStream 상에 보관하라.
Collection: 컬렉션 검사하기
capacity
증가하기 전에 수신자가 보관할 수 있는 요소의 개수를 응답하라.
identityIncludes: anObject
우리가 anObject 객체를 포함하는지 여부를 응답하라.
includes: anObject
우리가 anObject 객체를 포함하는지 여부를 응답하라.
includesAnyOf: aCollection
우리가 aCollection 내 어떤 객체라도 포함하는지 여부를 응답하라.
isEmpty
우리가 (여전히) 빈 상태인지 응답하라.
isSequenceable
#at:/-#at:put: 를 이용해 숫자형 색인이 수신자에게 접근 가능한지 응답하라.
notEmpty
우리가 최소 하나의 객체를 포함하는지 응답하라.
occurrencesOf: anObject
우리가 포함하는 anObject의 발생 수를 응답하라.
size
우리가 포함하는 객체 수를 응답하라.