GnuSmalltalkUsersGuide:BaseChapter 120
- Object
Object
네임스페이스 Smalltalk에 정의됨
슈퍼클래스: none
범주: 언어-구현
- 나는 스몰토크 클래스 시스템의 뿌리(root)다. 시스템 내 모든 클래스는 나의 서브클래스이다.
Object 클래스: 초기화
dependencies
객체를 그것의 종속자들(dependents)과 연관시키는 dictionary를 응답하라.
dependencies: anObject
객체를 그것의 종속자들과 연관시키는 dictionary로서 anObject를 사용하라.
finalizableObjects
finalizable 객체의 집합을 응답하라.
initialize
Dependencies dictionary를 WeakKeyIdentityDictionary가 되도록 초기화하라.
update: aspect
ObjectMemory 이벤트에 대한 어떤 전역 작업이든 실행하라.
Object: built-ins
= arg
수신자가 arg와 같은지를 응답하라. 동등성 검사는 기본적으로 동일한(identical) 객체에 대한 검사와 같다. =는 실패해선 안 된다; 수신자를 arg와 비교할 수 없는 경우 false를 응답하라.
== arg
수신자가 arg와 같은 객체인지 응답하라. 이는 매우 빠른 검사이며 '객체 정체성(object identity)'이라고 불린다.
allOwners
수신자를 가리키는 Objects의 Array를 리턴하라.
asOop
수신자에 연관된 객체 색인을 응답하라. 객체 색인은 쓰레기 수집이 실행될 때도 변경되지 않는다.
at: anIndex
수신자의 index 번째 색인된 인스턴스 변수를 응답하라.
at: anIndex put: value
수신자의 index 번째 색인된 인스턴스 변수를 보관하라.
basicAt: anIndex
수신자의 index 번째 색인된 인스턴스 변수를 응답하라. 이 메서드는 오버라이드되어선 안되며, 대신 at: 을 오버라이드하라.
basicAt: anIndex put: value
수신자의 index 번째 색인된 인스턴스 변수를 보관하라. 이 메서드는 오버라이드되어선 안되며, 대신 at:put: 을 오버라이드하라.
basicPrint
수신자의 기본 표현을 인쇄하라.
basicSize
수신자 내에 색인된 인스턴스 변수의 개수를 응답하라.
become: otherObject
수신자에 대한 참조를 모두 otherObject에 대한 참조로 변경하라. 구현에 따라 otherObject에 대한 참조는 수신자로 변형될 수도, 변형되지 않을 수도 있다 (각각 '양방향 become'과 '한방향 become'). 한방향 become을 실행하는 구현은 수신자를 응답한다 (잃어버리지 않도록). 양방향 become을 실행하는 대부분의 구현부는 otherObject를 응답하지만 확실치 않으므로 일관성을 위해 수신자에게 응답을 꼭 하라. GNU Smalltalk는 양방향 become을 실행하고 otherObject를 응답하지만 향후 버전에선 변경될 수도 있다: 프로그램은 #become:의 결과와 행위에 의존해선 안 된다.
changeClassTo: aBehavior
수신자의 클래스를 aBehavior로 변형하라. 주목: 본래 클래스와 새 클래스의 구조가 동일할 것으로 무언으로 가정한다!!
checkIndexableBounds: index
Private - 주어진 색인된 인스턴스 변수로의 접근이 실패한 이유를 확인하라.
checkIndexableBounds: index put: object
Private - 주어진 색인된 인스턴스 변수로의 접근이 실패한 이유를 확인하라.
class
수신자가 속한 클래스를 응답하라.
halt
디버거를 입력하기 위해 호출되었다.
hash
수신자에 대한 해시값을 응답하라. 해당 해시값은 ==를 재정의하지 않는 객체에 괜찮다.
identityHash
수신자에 대한 해시값을 응답하라. 해당 메서드는 오버라이드되어선 안 된다.
instVarAt: index
수신자의 index 번째 인스턴스 변수를 응답하라. 해당 메서드는 오버라이드되어선 안 된다.
instVarAt: index put: value
값을 수신자의 index 번째 인스턴스 변수에 보관하라. 해당 메서드는 오버라이드되어선 안 된다.
isReadOnly
객체의 색인된 인스턴스 변수를 작성할 수 있는지 응답하라.
isUntrusted
객체가 신뢰할 수 없는 것으로 간주될 것인지 응답하라.
makeEphemeron
객체를 '단명(ephemeron)'으로 만들어라. Ephemeron은 다른 모든 객체를 따라 표시되며, 객체 자체로부터의 참조를 제외하고 키에 대한 참조를 찾을 수 없는 경우 #mourn 메시지가 전송된다.
makeFixed
쓰레기 수집에 걸쳐 메모리 내에서 수신자의 이동을 피하라.
makeReadOnly: aBoolean
객체의 색인된 인스턴스 변수의 작성 가능 여부를 설정하라.
makeUntrusted: aBoolean
객체를 신뢰할 수 없는 것으로 간주할 것인지 설정하라.
makeWeak
객체를 '약한' 객체로 만들어라. 객체가 약한 객체에 의해서만 참조되는 경우, 그것은 수집되고 약한 객체 내 슬롯은 VM에 의해 nil로 변경된다; 이후에 약한 객체로 #mourn 메시지가 전송된다.
mark: aSymbol
Private - 재작업, 제거 등을 필요로 하는 코드를 표시할 때 해당 메서드를 사용하라. 이후 #mark: 의 모든 전송자들을 찾아 모든 표시된 메서드를 찾을 수도 있고, #mark: 로 전송하였던 부호의 모든 전송자들을 검색하여 표시된 메서드의 범주를 찾을 수도 있다.
nextInstance
Private - 수신자의 클래스에서 다른 인스턴스를 응답하고, 전체 객체 테이블을 walk한 경우 nil을 응답하라.
notYetImplemented
클래스가 정의한 메서드가 아직 구현되지 않았지만 구현될 예정일 경우 호출된다.
perform: selectorOrMessageOrMethod
수신자로 selectorOrMessageOrMethod(Symbol인 경우)라고 명명된 단항 메시지를 전송하거나, 그것이 식별하는 메시지와 인자를 전송하거나 (Message 또는 DirectedMessage인 경우), 수신자 내부에서 메서드를 실행하라 (CompiledMethod인 경우). 마지막 사례의 경우, 메서드는 수신자의 클래스로부터 Object까지 계층구조에 상주할 필요가 없지만 - 사실상 애초에 MethodDictionary 내에 상주할 필요도 없다 - 올바르지 않은 행위를 실행할 경우 스몰토크 가상 머신의 안정성을 해칠 것이다 (따라서 본인 외에는 탓할 사람이 없다).
해당 메서드는 오버라이드되어선 안 된다.
perform: selectorOrMethod with: arg1
selectorOrMethod(Symbol인 경우)라고 명명된 메시지를 수신자에게 전송하는 동시 arg1를 전달하거나, 수신자 내에서 메서드를 실행하라 (CompiledMethod인 경우). 후자의 경우, 메서드는 수신자의 클래스로부터 Object까지 계층구조에 상주할 필요가 없지만 - 사실상 애초에 MethodDictionary 내에 상주할 필요도 없다 - 올바르지 않은 행위를 실행할 경우 스몰토크 가상 머신의 안정성을 해칠 것이다 (따라서 본인 외에는 탓할 사람이 없다).
해당 메서드는 오버라이드되어선 안 된다.
perform: selectorOrMethod with: arg1 with: arg2
selectorOrMethod(Symbol인 경우)라고 명명된 메시지를 수신자에게 전송하는 동시 arg1와 arg2를 전달하거나, 수신자 내에서 메서드를 실행하라 (CompiledMethod인 경우). 후자의 경우, 메서드는 수신자의 클래스로부터 Object까지 계층구조에 상주할 필요가 없지만 - 사실상 애초에 MethodDictionary 내에 상주할 필요도 없다 - 올바르지 않은 행위를 실행할 경우 스몰토크 가상 머신의 안정성을 해칠 것이다 (따라서 본인 외에는 탓할 사람이 없다).
해당 메서드는 오버라이드되어선 안 된다.
perform: selectorOrMethod with: arg1 with: arg2 with: arg3
selectorOrMethod(Symbol인 경우)라고 명명된 메시지를 수신자에게 전송하는 동시 다른 인자들을 전달하거나, 수신자 내에서 메서드를 실행하라 (CompiledMethod인 경우). 후자의 경우, 메서드는 수신자의 클래스로부터 Object까지 계층구조에 상주할 필요가 없지만 - 사실상 애초에 MethodDictionary 내에 상주할 필요도 없다 - 올바르지 않은 행위를 실행할 경우 스몰토크 가상 머신의 안정성을 해칠 것이다 (따라서 본인 외에는 탓할 사람이 없다).
해당 메서드는 오버라이드되어선 안 된다.
perform: selectorOrMethod with: arg1 with: arg2 with: arg3 with: arg4
selectorOrMethod(Symbol인 경우)라고 명명된 메시지를 수신자에게 전송하는 동시 다른 인자들을 전달하거나, 수신자 내에서 메서드를 실행하라 (CompiledMethod인 경우). 후자의 경우, 메서드는 수신자의 클래스로부터 Object까지 계층구조에 상주할 필요가 없지만 - 사실상 애초에 MethodDictionary 내에 상주할 필요도 없다 - 올바르지 않은 행위를 실행할 경우 스몰토크 가상 머신의 안정성을 해칠 것이다 (따라서 본인 외에는 탓할 사람이 없다).
해당 메서드는 오버라이드되어선 안 된다.
perform: selectorOrMethod withArguments: argumentsArray
selectorOrMethod(Symbol인 경우)라고 명명된 메시지를 수신자에게 전송하는 동시 argumentsArray의 요소들을 매개변수로서 전달하거나, 수신자 내에서 메서드를 실행하라 (CompiledMethod인 경우). 후자의 경우, 메서드는 수신자의 클래스로부터 Object까지 계층구조에 상주할 필요가 없지만 - 사실상 애초에 MethodDictionary 내에 상주할 필요도 없다 - 올바르지 않은 행위를 실행할 경우 스몰토크 가상 머신의 안정성을 해칠 것이다 (따라서 본인 외에는 탓할 사람이 없다).
해당 메서드는 오버라이드되어선 안 된다.
primitiveFailed
VM 프리미티브가 실패 시 호출된다.
shallowCopy
수신자의 얕은 복사를 리턴한다 (인스턴스 변수는 복사되지 않는다)
shouldNotImplement
클래스에 속한 객체가 슈퍼클래스에 의해 정의된 선택자를 응답해선 안 되는 경우에 호출된다.
size
수신자 내에 색인된 인스턴스 변수의 개수를 응답하라.
subclassResponsibility
클래스에 의해 정의된 메서드가 서브클래스에서 오버라이드되어야 할 때 호출된다.
tenure
객체를 oldspace로 이동시켜라.
Object: 변경하기와 업데이트하기
broadcast: aSymbol
수신자의 각 종속자에게 단항 메시지 aSymbol을 전송하라.
broadcast: aSymbol with: anObject
수신자의 각 종속자에게 메시지 aSymbol을 전송하고 anObject를 전달하라.
broadcast: aSymbol with: arg1 with: arg2
수신자의 각 종속자에게 메시지 aSymbol을 전송하고 arg1과 arg2를 매개변수로서 전달하라.
broadcast: aSymbol withArguments: anArray
수신자의 각 종속자에게 메시지 aSymbol을 전송하고 anArray의 매개변수들을 전달하라.
broadcast: aSymbol withBlock: aBlock
수신자의 각 종속자에게 메시지 aSymbol을 전송하고 각 종속자로 aBlock을 평가한 결과를 매개변수로서 전달하라.
changed
수신자의 각 종속자에 대해 update:를 전송하고 그들에게 수신자를 전달하라.
changed: aParameter
수신자의 각 종속자에 대해 update:를 전송하고 그들에게 aParameter를 전달하라.
update: aParameter
기본 행위는 아무 일도 하지 않는 것이다. #changed와 #changed: 에 의해 호출된다.
Object: 클래스 타입 메서드
species
해당 메서드는 유일한 정의를 갖고 있지 않다. 일반적으로 말해 항상 같은 타입을 리턴하는 메서드들은 #class를 사용하지 않고 #species를 사용한다. 가령 PositionableStream의 species는 그것이 스트리밍되는 컬렉션의 클래스이다 (upTo:, upToAll:, upToEnd 가 사용). 스트림은 next: 의 리턴값에 대한 클래스를 얻기 위해 species를 사용하고, Collection은 자신의 #copyEmpty: 메시지 내에서 그것을 사용하면 이후 컬렉션을 리턴하는 모든 메서드에 의해 사용된다. Interval의 species는 Array이다 (collect:, select:, reject:, 등이 사용).
yourself
수신자를 응답하라.
Object: 변환
asValue
초기값이 수신자인 ValueHolder를 응답하라.
Object: 복사하기
copy
수신자의 얕은 복사를 리턴하라 (인스턴스 변수는 복사되지 않는다). 얕은 복사는 postCopy 메시지를 수신하고, postCopy의 결과가 다시 전달된다.
deepCopy
수신자의 깊은 복사를 리턴한다 (인스턴스 변수는 수신자의 인스턴스 변수의 복사본이다).
postCopy
복사된 객체에서 요구되는 변경내용을 실행하라. 이는 객체를 객체의 복사본으로 대체하기 위한 코드를 놓는 곳이다.
Object: 디버깅하기
inspect
수신자의 모든 인스턴스 변수를 Transcript 상에 인쇄하라.
validSize
수신자 내에 얼마나 많은 요소를 검사해야 하는지 응답하라.
Object: 종속자 접근성
addDependent: anObject
수신자의 종속자 집합으로 anObject를 추가하라. 중요: 객체가 종속자를 가진 경우 쓰레기로 수집되지 않을 것이다.
dependents
수신자의 종속자들로 된 컬렉션을 응답하라.
release
집합으로부터 수신자의 종속자를 모두 제거하고 수신자가 쓰레기 수집되도록 허용하라.
removeDependent: anObject
수신자의 종속자들로 된 집합으로 anObject를 제거하라. anObject가 수신자의 종속자들로 된 집합에 있지 않더라도 문제되지 않는다.
Object: 오류 발생시키기
doesNotUnderstand: aMessage
선택자를 찾을 수 없을 때 시스템에 의해 호출된다. 메시지는 수신자에 관한 정보를 포함한 Message이다.
error: message
주어진 오류 메시지로 수신자에 대한 walkback을 표시하라. 'Error' 예외를 시그널링하라 (오래된 방식인 'ExError'를 이용해서 모을 수도 있다).
halt: message
주어진 오류 메시지로 수신자에 대한 walkback을 표시하라. 'Halt' 예외를 시그널링하라 (오래된 방식인 'ExHalt'를 이용해서 모을 수도 있다).
Object: finalization
addToBeFinalized
쓰레기 수집기가 객체에 대한 약한 참조만 존재한다는 사실을 발견하였을 때 객체로 #finalize를 전송할 수 있도록 준비하라.
finalize
기본적으로 아무 일도 하지 않는다.
mourn
해당 메서드는 객체 필드 중 하나가 쓰레기 수집이 가능한 것으로 발견되었을 때 VM에 의해 약한 객체와 단명 객체로 전송된다 (즉, 약한 객체의 경우 약하지 않은 객체로부터의 참조가 전혀 없음을 의미하고, 단명 객체의 경우 첫 번째 변수의 경로만이 같은 단명 객체의 다른 인스턴스 변수를 통해 전달됨을 의미한다). 기본 행위는 아무 일도 하지 않는 것이다.
removeToBeFinalized
객체의 등록을 해제하여 쓰레기 수집기가 객체로의 약한 참조만 존재함을 발견했을 때 #finalize가 더 이상 객체로 전송되지 않도록 한다.
Object: 자가점검(introspection)
instVarNamed: aString
수신자 내에서 aString으로 명명된 인스턴스 변수를 응답하라.
instVarNamed: aString put: anObject
수신자 내에서 aString으로 명명된 인스턴스 변수를 응답하라.
Object: 인쇄하기
basicPrintNl
수신자의 기본 표현 다음에 새 행을 인쇄하라.
basicPrintOn: aStream
수신자의 표현을 aStream 상에 인쇄하라.
display
수신자의 표현을 Transcript 상에 인쇄하라 (GUI의 stdout는 활성화되지 않음). 대부분의 객체에서 이는 단순히 #print 표현이지만 문자열이나 문자에서는 superfluous dollars 또는 추가 다옴표 쌍이 빠진다.
displayNl
수신자의 표현을 인쇄하고 새 행을 Transcript 상에 놓아라 (GUI의 stdout는 활성화되지 않음). 대부분의 객체에서 이는 단순히 #printNl 표현이지만 문자열이나 문자에서는 불필요한 달러 또는 추가 다옴표 쌍이 빠진다.
displayOn: aStream
수신자의 표현을 aStream 상에 인쇄하라. 대부분의 객체에서 이는 단순히 #printOn: 표현이지만 문자열이나 문자에서는 불필요한 달러 또는 추가 다옴표 쌍이 빠진다.
displayString
수신자를 나타내는 String을 응답하라. 대부분의 객체에서 이는 단순히 #printString 표현이지만 문자열이나 문자에서는 불필요한 달러 또는 추가 다옴표 쌍이 빠진다.
수신자의 표현을 Transcript 상에 인쇄하라 (GUI의 stdout는 활성화되지 않음).
printNl
수신자의 표현을 stdout 상에 인쇄하고, 새 행을 Transcript에 놓아라 (GUI의 stdout는 활성화되지 않음).
printOn: aStream
수신자의 표현을 aStream 상에 인쇄하라.
printString
수신자를 나타내는 String을 응답하라.
Object: 관계 연산
~= anObject
수신자와 anObject가 같지 않은지 응답하라.
~~ anObject
수신자와 anObject가 같은 객체가 아닌지를 응답하라.
Object: 저장하기와 로딩하기
binaryRepresentationObject
수신자의 클래스와 함께 PluggableProxies가 사용될 경우 해당 메서드가 구현되어야 한다. 기본 구현은 예외를 발생시킨다.
postLoad
객체를 로딩한 후 호출된다; 'preStore'가 호출되기 전 상태로 복구해야 한다. 기본 구현은 아무 일도 하지 않는 것이다.
postStore
객체를 덤프한 이후에 호출된다; 'preStore'가 호출되기 전 상태로 복구해야 한다. 기본적으로는 #postLoad를 호출한다.
preStore
객체를 덤프하기 전에 호출된다; 필요 시 *변경해야* 한다 (새 객체를 응답해선 안 된다). 기본 구현은 아무 일도 하지 않는 것이다.
reconstructOriginalObject
수신자 클래스의 인스턴스가 다른 객체의 -#binaryRepresentationObject 로서 리턴될 경우 사용된다. 기본 구현은 예외를 발생시킨다.
Object: 보관하기
store
수신자로 컴파일하는 스몰토크 코드의 String을 Transcript 상에 놓아라 (GUI의 stdout는 활성화되지 않음).
storeLiteralOn: aStream
수신자로 컴파일하는 스몰토크 리터럴을 aStream 상에 놓아라.
storeNl
수신자로 컴파일하는 스몰토크 코드의 String 다음에 새 행을 Transcript 상에 놓아라 (GUI의 stdout는 활성화되지 않음).
storeOn: aStream
수신자로 컴파일하는 스몰토크 코드를 aStream 상에 놓아라.
storeString
수신자로 컴파일하는 스몰토크 코드의 String을 응답하라.
Object: 구문 단축키
-> anObject
수신자를 키로 하고 인자가 값이 되는 수신자를 이용해 Association의 새 인스턴스를 생성한다.
Object: 기능 검사하기
ifNil: nilBlock
수신자가 nil인 경우 nilBlock을 평가하고, 그 외의 경우 self를 응답하라.
ifNil: nilBlock ifNotNil: notNilBlock
수신자가 nil인 경우 nilBlock을 평가하고, 그 외의 경우 notNilBlock을 평가하고 수신자를 전달하라.
ifNotNil: notNilBlock
수신자가 nil이 아닌 경우 notNilBlock(본문에 notNiilBlock이라고 되어 있네요. 확인 부탁드려요)을 평가하고 수신자를 전달하라. 그 외의 경우 nil을 응답하라.
ifNotNil: notNilBlock ifNil: nilBlock
수신자가 nil인 경우 nilBlock을 평가하고, 그 외의 경우 notNilBlock을 평가하여 수신자를 전달하라.
isArray
'false'를 응답하라.
isBehavior
'false'를 응답하라.
isCObject
'false'를 응답하라.
isCharacter
'false'를 응답하라.
isCharacterArray
'false'를 응답하라.
isClass
'false'를 응답하라.
isFloat
'false'를 응답하라.
isInteger
'false'를 응답하라.
isKindOf: aClass
수신자의 클래스가 aClass 또는 aClass의 서브클래스에 해당하는지 응답하라.
isMemberOf: aClass
수신자가 'aClass' 클래스의 인스턴스에 해당할 경우 true를 리턴하라.
isMeta
isMetaclass와 동일하다.
isMetaClass
isMetaclass와 동일하다.
isMetaclass
'false'를 응답하라.
isNamespace
'false'를 응답하라.
isNil
수신자가 nil인지를 응답하라.
isNumber
'false'를 응답하라.
isSmallInteger
'false'를 응답하라.
isString
'false'를 응답하라.
isSymbol
'false'를 응답하라.
notNil
수신자가 nil이 아닌지를 응답하라.
respondsTo: aSymbol
수신자가 주어진 선택자를 이해할 경우 true를 리턴한다.
Object: VM 콜백
badReturnError
블록이 bad 리턴을 수행할 경우 콜백된다.
mustBeBoolean
ifTrue:*, ifFalse:*, and: 또는 or: 이 부울 이외의 것으로 전송될 경우 시스템에 의해 호출된다.
noRunnableProcess
모든 프로세스가 중지될 경우 호출된다.
userInterrupt
사용자가 Ctrl-Break를 누를 때 호출된다.