GnuSmalltalkUsersGuide:BaseChapter 009: Difference between revisions
Onionmixer (talk | contribs) (GSUG Behavior 페이지 추가) |
Onionmixer (talk | contribs) |
||
Line 172: | Line 172: | ||
====primCompile: code ifError: aBlock==== | ====primCompile: code ifError: aBlock==== | ||
#primCompile:와 마찬가지지만 코드가 스몰토크 구문을 따르지 않을 시 aBlock을 평가하라 (파일명, 오류의 설명과 행번호를 전달하라). | #primCompile:와 마찬가지지만 코드가 스몰토크 구문을 따르지 않을 시 aBlock을 평가하라 (파일명, 오류의 설명과 행번호를 전달하라). | ||
이를 사용자 코드에서 전송하지 말라; 대신 #compile:ifError: 또는 이와 관련 메서드를 사용하라. | 이를 사용자 코드에서 전송하지 말라; 대신 #compile:ifError: 또는 이와 관련 메서드를 사용하라. | ||
====someInstance==== | ====someInstance==== |
Latest revision as of 11:46, 21 January 2014
- Behavior
Behavior
네임스페이스 Smalltalk에 정의됨
슈퍼클래스: Object
범주: 언어-구현
- 나는 모든 "클래스" 타입 메서드의 부모 클래스이다. 나의 인스턴스들은 클래스들 간 서브클래스/슈퍼클래스 관계를 알고, 인스턴스가 어디로부터 생성되었는지 설명을 포함하며, 각 클래스와 연관된 메서드 dictionary를 보유한다. 메서드의 컴파일, 클래스 상속 계층구조의 수정, 메서드 dictionary 검토, 클래스 계층구조 반복(iterate)을 위한 메서드를 제공한다.
Behavior: 클래스 계층구조 접근하기
allSubclasses
Set 내 수신자의 직접 및 간접 서브클래스를 응답하라.
allSuperclasses
컬렉션 내 수신자의 모든 슈퍼클래스를 응답하라.
subclasses
Set 내 수신자의 직접 서브클래스를 응답하라.
superclass
수신자의 슈퍼클래스를 응답하라 (존재할 경우에만, 그렇지 않으면 nil을 응답)
withAllSubclasses
직접 및 간접 서브클래스와 함께 수신자를 포함한 Set를 응답하라.
withAllSuperclasses
컬렉션 내 수신자와 그 모든 슈퍼클래스를 응답하라.
Behavior: 인스턴스와 변수 접근하기
allClassVarNames
수신자가 이해하는 모든 클래스 변수를 리턴하라.
allInstVarNames
수신자의 인스턴스에 수신자가 포함한 모든 인스턴스 변수의 이름을 응답하라.
allInstances
수신자의 모든 인스턴스 집합을 리턴하라.
클래스와 그 모든 슈퍼클래스가 정의한 공유 풀을 올바른 검색 순으로 리턴하라.
클래스와 그 모든 슈퍼클래스가 정의한 공유 풀의 이름을 올바른 검색 순으로 리턴하라.
classPool
클래스 풀 dictionary를 응답하라. Behavior는 클래스 변수가 있는 클래스는 지원하지 않으므로 빈 대상을 응답하라; 여기에 변수를 추가 시 오류를 발생시킨다.
classVarNames
수신자의 인스턴스에 대한 모든 클래스 변수를 응답하라.
indexOfInstVar: aString
수신자의 인스턴스의 고정된 인스턴스 변수 내 aString 색인을 응답하고, 변수가 없다면 0을 응답하라.
indexOfInstVar: aString ifAbsent: aBlock
수신자의 인스턴스의 고정된 인스턴스 변수 내 aString 색인을 응답하고, 변수가 없다면 0을 응답하라.
instVarNames
수신자가 정의한 인스턴스 변수를 포함하는 Array를 응답하라.
instanceCount
수신자의 모든 인스턴스 count를 리턴하라.
클래스가 정의한 공유 풀의 이름을 리턴하라.
subclassInstVarNames
수신자가 자신의 슈퍼클래스로부터 상속받은 인스턴스 변수의 이름을 응답하라.
Behavior: methodDictionary로 접근하기
>> selector
로컬 메서드 dictionary로부터 선택자와 연관된 컴파일된 메서드를 리턴하라. 발견할 수 없을 경우 오류가 발생한다.
allSelectors
수신자가 이해하는 모든 선택자의 Set를 응답하라.
compiledMethodAt: selector
로컬 메서드 dictionary로부터 선택자와 연관된 컴파일된 메서드를 리턴하라. 발견할 수 없을 경우 오류가 발생한다.
compiledMethodAt: selector ifAbsent: aBlock
로컬 메서드 dictionary로부터 선택자와 연관된 컴파일된 메서드를 리턴하라. 발견할 수 없을 경우 aBlock을 평가하라.
lookupSelector: aSelector
로컬 메서드 dictionary 또는 슈퍼클래스 중 하나로부터 선택자와 연관된 컴파일된 메서드를 리턴하라; 발견할 수 없을 경우 nil을 리턴하라.
parseTreeFor: selector
주어진 선택자에 대한 파스 트리를 응답하고, 오류가 있을 경우 nil을 응답하라. Parser 패키지를 로드하도록 요구한다.
selectorAt: method
주어진 CompiledMethod에 대한 선택자를 리턴하라.
selectors
수신자의 선택자 Set를 응답하라.
sourceCodeAt: selector
주어진 선택자에 대한 소스 코드를 (이용 가능할 시) 응답하라.
sourceCodeAt: selector ifAbsent: aBlock
주어진 선택자에 대한 소스 코드를 (이용 가능할 시) 응답하라.
sourceMethodAt: selector
원(original) 구현에 너무 의존한다.
Behavior: 빌드된 ins
basicNewInFixedSpace
색인된 인스턴스 변수가 없는 클래스의 새 인스턴스를 생성하라. 인스턴스가 쓰레기 수집에 거쳐 이동하지 않도록 보장한다. #basicNew와 마찬가지로 해당 메서드 또한 오버라이드되어선 안 된다.
basicNewInFixedSpace: numInstanceVariables
색인된 인스턴스 변수가 있는 클래스의 새 인스턴스를 생성하라. 인스턴스는 numInstanceVariables 색인된 인스턴스 변수를 갖는다. 인스턴스가 쓰레기 수집에 거쳐 이동하지 않도록 보장한다. #basicNew:와 마찬가지로 해당 메서드 또한 오버라이드되어선 안 된다.
flushCache
가상 머신이 보관한 메서드 캐시를 무효화하라. 해당 메시지는 굳이 사용자 프로그램이 호출해야 할 이유는 없다.
methodsFor: category ifTrue: condition
조건이 true일 경우 주어진 범주로 수신자 내부에서 다음 코드를 컴파일하라; 그렇지 않으면 무시하라.
primCompile: code
어떠한 범주도 없이 코드, 문자열 또는 읽기 가능한 스트림을 컴파일하라. 코드가 스몰토크 구문을 따르지 않을 경우 실패한다. 구문을 따를 경우 생성된 CompiledMethod를 응답하라.
이를 사용자 코드에서 전송하지 말라; 대신 #compile: 또는 이와 관련된 메서드를 사용하라.
primCompile: code ifError: aBlock
#primCompile:와 마찬가지지만 코드가 스몰토크 구문을 따르지 않을 시 aBlock을 평가하라 (파일명, 오류의 설명과 행번호를 전달하라).
이를 사용자 코드에서 전송하지 말라; 대신 #compile:ifError: 또는 이와 관련 메서드를 사용하라.
someInstance
Private – 객체 테이블 내에서 수신자의 첫 번째 인스턴스를 응답하라.
Behavior: builtin
basicNew
색인된 인스턴스 변수가 없는 클래스의 새 인스턴스를 생성하라; 해당 메서드는 오버라이드되어선 안 된다.
basicNew: numInstanceVariables
색인된 인스턴스 변수가 있는 클래스의 새 인스턴스를 생성하라. 인스턴스는 numInstanceVariables 색인된 인스턴스 변수를 갖는다; 해당 메서드는 오버라이드되어선 안 된다.
new
색인된 인스턴스 변수가 없는 클래스의 새 인스턴스를 생성하라.
new: numInstanceVariables
색인된 인스턴스 변수가 있는 클래스의 새 인스턴스를 생성하라. 인스턴스는 numInstanceVariables 색인된 인스턴스 변수를 갖는다.
Behavior: 컴파일 (대안적)
methods
Smalltalk/V으로부터 file in용으로만 존재하므로 사용하지 말라.
methodsFor
Dolphin Smalltalk으로부터 file in용으로만 존재하므로 사용하지 말라.
methodsFor: category ifFeatures: features
스몰토크의 이러한 구현이 주어진 기능을 갖고 있다면 수신자 내에서 메서드의 컴파일을 시작하고, 그렇지 않을 경우 section을 건너뛰어라.
methodsFor: category stamp: notUsed
Squeak으로부터 file in용으로만 존재하므로 사용하지 말라.
privateMethods
IBM Smalltalk로부터 file in용으로만 존재하므로 사용하지 말라.
publicMethods
IBM Smalltalk로부터 file in용으로만 존재하므로 사용하지 말라.
Behavior: 메서드 컴파일하기
methodsFor: aCategoryString
해당 메서드를 호출하면 수신자의 메서드 dictionary에 컴파일 및 설치되어야 할 메시지를 파서(parser)가 수신하도록 준비시킨다. 메서드는 매개변수에 의해 식별된 범주에 놓인다.
poolResolution
PoolResolution 클래스 상에서 메서드를 컴파일하는 동시 풀(pool) 변수를 해결하는 데 사용될 PoolResolution 클래스를 응답하라.
Behavior: 클래스 계층구조 생성하기
addSubclass: aClass
aClass를 수신자의 서브클래스 중 하나로서 추가하라.
removeSubclass: aClass
수신자의 서브클래스 리스트에서 aClass를 제거하라.
superclass: aClass
수신자의 슈퍼클래스를 설정하라.
Behavior: 열거하기
allInstancesDo: aBlock
수신자의 모든 인스턴스에 대해 aBlock을 호출하라.
allSubclassesDo: aBlock
모든 직접 및 간접 서브클래스에 대해 aBlock을 호출하라.
allSubinstancesDo: aBlock
수신자의 각 서브클래스의 모든 인스턴스에 대해 aBlock을 호출하라.
allSuperclassesDo: aBlock
모든 직접 및 간접 슈퍼클래스에 대해 aBlock를 호출하라.
selectSubclasses: aBlock
aBlock을 충족하는 수신자의 서브클래스 Set를 리턴하라.
selectSuperclasses: aBlock
aBlock을 충족하는 수신자의 슈퍼클래스 Set를 리턴하라.
subclassesDo: aBlock
모든 직접 서브클래스에 대해 aBlock을 호출하라.
withAllSubclassesDo: aBlock
모든 직접 및 간접 서브클래스와 수신자에 대해 aBlock을 호출하라.
withAllSuperclassesDo: aBlock
모든 직접 및 간접 슈퍼클래스와 수신자에 대해 aBlock을 호출하라.
Behavior: 평가하기
evalString: aString to: anObject
aString에서 코드의 평가 끝에 스택 top을 응답하라. 코드는 anObject의 일부로서 실행된다.
evalString: aString to: anObject ifError: aBlock
aString에서 코드의 평가 끝에 스택 top을 응답하라. aString을 파스할 수 없을 경우 aBlock을 평가하라 (compile:ifError: 참고). 코드는 anObject의 일부로서 실행된다.
evaluate: code
'code' 내의 스몰토크 표현식을 평가하고 결과를 리턴하라.
evaluate: code ifError: block
'code'를 평가하라. 파싱 오류가 감지되면 'block'을 호출하라.
evaluate: code notifying: requestor
'code' 내의 스몰토크 표현식을 평가하라. 파싱 오류에 직면하면 요청자에게 #error:를 전송하라.
evaluate: code to: anObject
스몰토크 표현식을 anObject의 메서드 정의의 일부로서 평가하라.
evaluate: code to: anObject ifError: block
스몰토크 표현식을 anObject의 메서드 정의의 일부로서 평가하라. 해당 메서드는 Inspector 표현식 평가를 지원하기 위해 사용된다. 파싱 오류에 직면하면 오류 블록, 'block'을 호출하라.
Behavior: 인스턴스 생성
newInFixedSpace
색인된 인스턴스 변수가 없는 클래스의 새 인스턴스를 생성하라. 인스턴스가 쓰레기 수집에 거쳐 이동하지 않도록 보장한다. 서브클래스가 #new를 오버라이드할 경우 변경 내용이 해당 메서드에도 적용될 것이다.
newInFixedSpace: numInstanceVariables
색인된 인스턴스 변수가 있는 클래스의 새 인스턴스를 생성하라. 인스턴스는 numInstanceVariables 색인된 인스턴스 변수를 갖는다. 인스턴스가 쓰레기 수집에 거쳐 이동하지 않도록 보장한다. 서브클래스가 #new:를 오버라이드할 경우 변경 내용이 해당 메서드에도 적용될 것이다.
Behavior: 인스턴스 변수
addInstVarName: aString
주어진 인스턴스 변수를 수신자의 인스턴스에 추가하라.
instanceVariableNames: instVarNames
수신자에 대한 인스턴스 변수가 instVarNames의 것이 되도록 설정하라.
removeInstVarName: aString
주어진 인스턴스 변수를 수신자로부터 제거하고 수신자의 모든 서브클래스를 재컴파일하라.
Behavior: 메서드 dictionary
addSelector: selector withMethod: compiledMethod
주어진 compiledMethod를 메서드 dictionary에 추가하고, 전달된 선택자에게 제공하라. compiledMethod를 응답하라.
compile: code
메서드 소스를 컴파일하라. 파싱 오류가 있을 경우 nil을 응답하라. 그렇지 않을 경우 컴파일에 대한 CompiledMethod 결과를 리턴하라.
compile: code ifError: block
메서드 소스를 컴파일하라. 파싱 오류가 있을 경우 예외 블록, 'block'을 호출하여 파일명, 행번호, 오류를 전달하라. 컴파일에 대한 CompiledMethod 결과를 리턴하라.
compile: code notifying: requestor
메서드 소스를 컴파일하라. 파싱 오류가 있을 경우 요청자 객체로 #error: 를 전송하고, 그렇지 않을 경우 컴파일에 대한 CompiledMethod 결과를 리턴하라.
compileAll
수신자 내의 모든 선택자를 재컴파일하라. 오류는 무시하라.
compileAll: aNotifier
수신자 내의 모든 선택자를 재컴파일하라. 무언가 잘못되면 #error: 메시지를 전송하여 aNotifier에게 알려라.
compileAllSubclasses
모든 서브클래스의 모든 선택자를 재컴파일하라. 무언가 잘못되면 #error: 메시지를 전송하여 aNotifier에게 알려라.
compileAllSubclasses: aNotifier
모든 서브클래스의 모든 선택자를 재컴파일하라. 무언가 잘못되면 #error: 메시지를 전송하여 aNotifier에게 알려라.
createGetMethod: what
변수 'what'에 접근하는 메서드를 생성하라.
createGetMethod: what default: value
변수 'what'에 접근하는 메서드를 생성하고, 느긋한 초기화(lazy initialization)를 이용해 'value'의 기본 값을 사용하라.
createSetMethod: what
변수 'what'을 설정하는 메서드를 생성하라.
decompile: selector
주어진 선택자에 대한 바이트코드를 디컴파일(decompile)하라.
defineAsyncCFunc: cFuncNameString withSelectorArgs: selectorAndArgs args: argsArray
매뉴얼에서 C 인터페이스에 관한 부분을 찾아보길 바란다. 해당 메서드는 중요도가 떨어져 사라지므로 asyncCCall:args: 속성을 사용해야 한다.
defineCFunc: cFuncNameString withSelectorArgs: selectorAndArgs returning: returnTypeSymbol args: argsArray
매뉴얼에서 C 인터페이스에 관한 부분을 찾아보길 바란다. 해당 메서드는 중요도가 떨어져 사라지므로 cCall:returning:args: 속성을 사용해야 한다.
edit: selector
전달된 선택자로 메서드를 편집하기 위해 Emacs를 열고 컴파일하라.
methodDictionary
수신자의 메서드 dictionary를 응답하라. 무엇을 하는지 정확히 알기 전까진 메서드 dictionary를 수정하지 말라.
methodDictionary: aDictionary
수신자의 메서드 dictionary를 aDictionary로 설정하라.
recompile: selector
주어진 선택자를 재컴파일하고, 무언가 잘못되면 nil을, 모두 괜찮다면 새 CompiledMethod를 응답하라.
recompile: selector notifying: aNotifier
주어진 선택자를 재컴파일하라. 파싱 오류가 있다면 aNotifier 객체로 #error: 를 전송하고, 그렇지 않으면 컴파일에 대한 CompiledMethod 결과를 리턴하라.
removeSelector: selector
주어진 선택자를 메서드 dictionary로부터 제거하고 그 선택자에 부착된 CompiledMethod를 응답하라.
removeSelector: selector ifAbsent: aBlock
주어진 선택자를 메서드 dictionary로부터 제거하고 그 선택자에 부착된 CompiledMethod를 응답하라. 선택자를 찾을 수 없다면 aBlock의 평가 결과를 응답하라.
selectorsAndMethodsDo: aBlock
aBlock을 평가하고, 각 평가마다 수신자와 그에 해당하는 메서드에 정의된 선택자를 전달하라.
Behavior: 클래스 선언 파싱하기
parseInstanceVariableString: variableString
#parseVariableString: 과 마찬가지지만 문자열 대신 변수를 명명한 부호를 응답하라.
parseVariableString: aString
인스턴스 변수명의 배열을 응답하라. aString은 이를 전형적인 file-in 'instanceVariableNames' 포맷으로 명시해야 한다. aString이 유효한 스몰토크 변수 외의 것을 포함할 경우 오류를 신호로 보낸다.
Behavior: 플러그인 가능한 행위 (아직 구현되지 않음)
compilerClass
파스 트리를 컴파일하는 데 사용 가능한 클래스를 응답하고, 없을 경우엔 nil을 응답하라(현재는 후자에 해당). parserClass가 nil을 응답하는 메서드에는 사용하지 않고, evaluatorClass가 nil을 응답할 경우 doits에 사용하지 않는다.
debuggerClass
수신자를 포함하는 컨텍스트의 체인(chain)을 디버깅하는 데 사용할 클래스를 응답하라. nil은 '디버그하지 말라'는 의미다; 그 외 클래스에 #debuggingPriority가 전송되고, 우선순위가 가장 높은 클래스가 선택된다.
decompilerClass
메서드를 디컴파일하는 데 사용 가능한 클래스를 응답하고, 없을 경우 nil을 응답하라(현재는 후자에 해당).
evaluatorClass
doits를 디컴파일하는 데 사용 가능한 클래스를 응답하고, 없을 경우 nil을 응답하라(현재는 후자에 해당).
parserClass
메서드를 파싱하는 데 사용 가능한 클래스를 응답하고, 없을 경우 nil을 응답하라(현재는 후자에 해당).
Behavior: 계층구조 인쇄하기
hierarchyIndent
#printHierarchy 가 사용하는 띄워쓰기(indent)를 응답하라 - 기본값은 4.
printHierarchy
단말기에 나의 전체 서브클래스 계층구조를 인쇄하라.
printSubclasses: level using: aBlock
내 이름을 인쇄한 후 내 서브클래스를 계층구조에서 각자의 위치에 따라 띄워쓰기 하여 인쇄하라. 나는 aBlock에 클래스명과 수준을 전달한다.
Behavior: 아직 분류되지 않음
메타클래스 내 메서드에서 눈에 보이는 공유 풀을 올바른 검색 순으로 응답하라.
parseNodeAt: selector
Parser 패키지가 로드될 때만 이용 가능하다-선택자가 명명한 내 메서드로 컴파일하는 RBMethodNode를 응답하라.
updateInstanceVars: variableArray shape: shape
클래스와 그 모든 서브클래스의 인스턴스 명세(spec)와 인스턴스 변수를 업데이트하라. variableArray는 상속된 변수를 포함해 새 변수를 열거한다.
Behavior: 가벼운 클래스 지원
article
수신자명으로 괜찮은 관사('a' 또는 'an')를 응답하라.
asClass
완전한 Class 객체에 해당하는 첫 번째 슈퍼클래스를 응답하라.
environment
이 클래스가 속한 네임스페이스를 응답하라 – Behavior가 아직 네임스페이스를 지원하지 않으므로 슈퍼클래스와 같다.
name
클래스명을 응답하라; 중괄호 안에 표기된 슈퍼클래스명에 인쇄한다. 해당 클래스명은 가령 수신자를 인쇄할 때 사용된다.
nameIn: aNamespace
aNamespace로부터 클래스가 참조될 때 클래스명을 응답하라 – Behavior는 이름을 지원하지 않으므로 dummy 이름이 될 것이다.
printOn: aStream in: aNamespace
aNamespace로부터 클래스가 참조될 때 클래스명을 응답하라 – Behavior는 이름을 지원하지 않으므로 dummy 이름이 될 것이다.
securityPolicy
해당 설명 없음.
securityPolicy: aSecurityPolicy
해당 메서드는 해당 클래스의 인스턴스에 호출해선 안 된다.
Behavior: 기능 검사하기
isBehavior
'true' 를 응답하라.
Behavior: 클래스 계층구조 검사하기
includesBehavior: aClass
aClass가 수신자이거나 수신자의 슈퍼클래스인 경우 true를 리턴하라.
inheritsFrom: aClass
aClass가 수신자의 슈퍼클래스인 경우 true를 리턴하라.
kindOfSubclass
수신자의 클래스 타입을 나타내는 문자열을 리턴하라.
shape
나의 인스턴스의 부호 모양(symbolic shape)을 리턴하라.
#ushort
shape: shape
제공된 모양을 수신자의 인스턴스로 제공하라. 모양은 nil이거나, #byte #int8 #character #short #word #ushort #int #uint #int64 -#uint64 #utf32 #float #double 또는 #pointer 중 하나가 될 수 있다. 또한 특수값 #inherit 는 슈퍼클래스의 모양을 사용할 것을 의미한다; 하지만 정적인 설정이므로 #inherit을 사용한 서브클래스는 슈퍼클래스가 다른 모양을 취한다 하더라도 변형되지 않음을 주목하라.
Behavior: 인스턴스의 형태 검사하기
instSize
수신자의 인스턴스 각각에 얼마나 많은 고정 인스턴스 변수가 보유되어 있는지 응답하라.
isBits
나의 인스턴스의 변수가 immediate, non-OOP 값인지를 응답하라.
isFixed
수신자의 인스턴스에 어떤 색인된 인스턴스 변수도 없는지를 응답하라.
isIdentity
수신자의 인스턴스에 대해 x = y 가 x == y 를 의미하는지 응답하라.
isImmediate
x가 수신자의 인스턴스일 경우 x copy == x 인지 여부를 응답하라.
isPointers
수신자의 인스턴스의 인스턴스 변수가 객체인지 응답하라.
isVariable
수신자의 인스턴스가 색인된 인스턴스 변수를 갖고 있는지 여부를 응답하라.
Behavior: 메서드 dictionary 검사하기
canUnderstand: selector
수신자의 인스턴스가 주어진 선택자를 이해할 경우 true를 리턴하라.
hasMethods
수신자가 정의된 메서드를 갖고 있는지 여부를 리턴하라.
includesSelector: selector
로컬 메서드 dictionary가 주어진 선택자를 포함할 경우 true를 리턴하라.
scopeHas: name ifTrue: aBlock
수신자의 인스턴스가 이해하는 메서드가 'name' 으로 명명된 부호로 접근성을 갖고 있다면 aBlock을 평가하라.
whichClassIncludesSelector: selector
수신자의 계층구조에서 클래스의 인스턴스에 의해 사용되는 선택자의 구현을 포함하는 클래스를 응답하라 (없을 경우 nil)
whichSelectorsAccess: instVarName
주어진 인스턴스 변수로 접근하는 선택자의 Set를 응답하라.
whichSelectorsAssign: instVarName
주어진 인스턴스 변수를 읽는 선택자의 Set를 응답하라.
whichSelectorsRead: instVarName
주어진 인스턴스 변수를 읽는 선택자의 Set를 응답하라.
whichSelectorsReferTo: anObject
anObject를 참조하는 선택자의 Set를 리턴하라.
whichSelectorsReferToByteCode: aByteCode
클래스에서 바이트 코드, aByteCode를 참조하는 선택자의 컬렉션을 리턴하라.