SqueakByExample:3.2
가상 변수
스몰토크에서는, 여섯개의 예약어가 있는데 이를 가상 변수Psudo-valiables라고도 합니다: nil, true, false, self, super, thisContext 가 바로 그것입니다. 가상 변수라고 부른 이유는 미리 정의하거나 할당할 수 없기 때문입니다.[1] 코드가 수행되는 중에 self, super, thisContext의 값은 코드를 실행하면서 동적으로 바뀌는 반면에 true, false, nil 은 애초부터 정의되어있는 상수입니다.
true 와 false 는 Boolean 클래스인 True 와 False 의 고유한 인스턴스 입니다. 더 자세한 내용은 8장을 참조하십시오.
self 는 항상 현재 메서드를 실행 중인 수신자를 참조합니다.
super 는 항상 현재 메서드의 수신자를 참조하지만, 메시지를 super로 보내면, 메서드 검색 위치가 바뀌어서, super를 사용하는 메서드를 포함하는 클래스의 super클래스에서 시작합니다. 더 자세한 내용은 5장을 참조하십시오.
nil 은 정의하지 않은 오브젝트를 의미합니다. 이것은 클래스 UndefinedObject의 고유한 인스턴스입니다. 인스턴스 변수, 클래스 변수, 지역 변수는 nil로 초기화 합니다.
thisContext 는 런타임 시점에서 스택의 최상위 프레임을 나타내는 가상 변수입니다. 다르게 말하자면, 현재 실행 중인 MethodContext 또는 BlockContext를 나타냅니다. thisContext는 보통 대부분의 프로그래머들이 관심을 가지지 않지만, 디버거와 같은 개발 도구를 실행하기 위해 필수적이며, 예외 처리및 계속 실행을 구현하기 위해 사용하기도 합니다.[2]
Notes
- ↑ 미리 정의하거나 할당될 수 없다는건 클래스의 인스턴스가 생성되는 시점에서 자동으로 존재될 수 있기 때문입니다. 새로 값을 할당하거나 하는게 아니라 런타임시에 동적으로 자동으로 할당되기 때문인거죠. 예를 들자면 self의 경우는 인스턴스 내부에서 자신을 가리키는 변수기떄문에 별도로 정의하거나 할 수 있는게 아니라는 의미입니다.
- ↑ http://blog.naver.com/PostView.nhn?blogId=tkandrea92&logNo=80013761680&parentCategoryNo=4&viewDate=¤tPage=1&listtype=0 이 부분에 있는 설명이 조금 더 정확하다고 생각됩니다. 현재 실행되고있는 프레임의 주소값. 그러니 디버깅할때 의미가 있겠죠.