GnuSmalltalkUsersGuide:BaseChapter 120

From 흡혈양파의 번역工房
Jump to navigation Jump to search
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 표현이지만 문자열이나 문자에서는 불필요한 달러 또는 추가 다옴표 쌍이 빠진다.

print

수신자의 표현을 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를 누를 때 호출된다.


Notes