SqueakByExample:12.4: Difference between revisions

From 흡혈양파의 번역工房
Jump to navigation Jump to search
(pdf 원문에서 다음 페이지로 넘어가버린 이미지 추가)
mNo edit summary
Line 30: Line 30:




[[image:TranslucentColorBlue.png|none|1024px|thumb|그림 12.5: 클래스를 위한 메시지 look up은 보통 오브젝트(ordinary objects)에 대해서도 동일합니다.]]
[[image:TranslucentColorBlue.png|none|1024px|thumb|그림 12.5: 클래스를 위한 메시지 look up은 일반 오브젝트(ordinary objects)에 대해서도 동일합니다.]]





Revision as of 04:25, 30 August 2012

메타 클래스 계층도는 클래스 계층도와 평행을 이룹니다.

Rule 7은 메타클래스의 수퍼클래스(superclass)는 임시 클래스(arbitrary class)가 될 수 없다고 말합니다. 이것은 강제로 메타클래스의 고유한 인스턴스의 수퍼클래스(superclass)의 메타클래스가 됩니다.

TranslucentColor class superclass        Color class
TranslucentColor superclass class        Color class


이것이 메타클래스 계층도가 클래스 계층도에 평행을 이룬다는 말의 의미이며 그림 12.4는 이 평행성이 TransclucentColor에서 어떻게 역할을 하는지를 보여드립니다:


그림 12.4: 메타클래스 계층도는 클래스 계층도(the class hierarchy)와 평행을 이룹니다.
TranslucentColor class        TranslucentColor class
TranslucentColor class superclass        Color class
TranslucentColor class superclass superclass        Object class


클래스와 오브젝트 사이의 균일성(uniformity) 잠시 한 걸음 뒤로 돌아가, 오브젝트와 클래스에 메시지를 발송하는 작업 사이의 차이점이 없는 것을 깨닫는 것은 흥미로운 일입니다. 두 가지 사례 모두에서, 대응하는 메소드(the corresponding method) 검색은 수신자(the receiver)의 클래스에서 시작하며 계층도 사슬(the inheritance chain)까지 진행됩니다.

그러므로 클래스에 발송된 메시지는 메타클래스 계층도 사슬을 따릅니다. 예를 들면 메소드(method) blue의 경우 Color의 class side에서 실행됩니다. 만약 우리가 메시지 blue를 TranslucentColor에 발송하면, 그것은 다른 메시지와 동일한 방식으로 검색될 것입니다. Look up은 TranslucentColor 클래스에서 시작하고 Color 클래스(그림 12.5를 보세요)에서 발견될 때까지 메타클래스 계층도 까지 진행됩니다.

TranslucentColor blue        Color blue

우리가 결과로서 ordinary Color blue(파랑색)를 얻고 translucent one(불투명한 파랑)을 얻지 않는 다는 것에 주의합시다-마술(magic)은 없습니다.


그림 12.5: 클래스를 위한 메시지 look up은 일반 오브젝트(ordinary objects)에 대해서도 동일합니다.


그러므로 우리는 스몰토크에서 한 가지 균일한 종류의 메소드 보기(method lookup)가 있다는 것을 알게 됩니다. 클래스는 단순히 오브젝트들이며, 모든 다른 오브젝트와 같이 동작합니다. 클래스는 오직 새로운 인스턴스를 만들 능력을 갖고 있습니다. 그 이유는 클래스는 우연히 메시지 new에 반응하고, new를 위한 메소드는 new 인스턴스를 만드는 방법을 알기 때문입니다. 보통 비-클래스 오브젝트(non-class objects)는 이 메시지를 이해하지 못하지만, 만약 여러분이 이 작업을 하기 위한 좋은 이유를 갖고 있다면, 여러분이 new 메소드를 비-메타클래스(non-metaclass)에 추가하는 작업으로부터 여러분을 막을 수 있는 것은 아무것도 없습니다.

클래스들이 오브젝트이기 때문에, 우리는 그것들을 정밀검사(inspect)할 수 있습니다.


Squeak comment.pngColor blue 와 Color를 정밀 검사합니다.


당신이 컬러의 인스턴스 그리고 컬러클래스 자신을 조사하는 경우에는 주의해야한다. 좀 혼란스러울수도 있는데 inspector의 타이틀바는 검사되는 오브젝트의 클래스 이름을 말하기 때문입니다.

Color(오브젝트 또는 인스턴스)의 Inspector는 그림 12.6에서 보시는 것과 같이 Color 클래스의 superclass, instance variables, method dictionary 등을 볼 수 있도록 허용합니다.


그림 12.6 클래스들 또한 오브젝트 입니다.


Notes