SqueakByExample:12.1
클래스(class)와 메타클래스(metaclass)의 규칙들
스몰토크 오브젝트 모델은 일정하게 적용된 제한된 수의 개념들에 기초합니다. 스몰토크의 디자이너들은 Occam의 razor를 적용하였습니다: 필요한 것보다 좀더 복잡한 모델로 이끄는 모든 고려사항들은 폐기됩니다.
여러분의 기억을 상기시켜드리기 위해, 우리가 5장에서 살펴본 오브젝트 모델들의 규칙들을 다음과 같이 기록하였습니다.
Rule 1. 모든 것은 오브젝트이다.
Rule 2. 모든 오브젝트는 클래스의 인스턴스 이다.
Rule 3. 모든 클래스는 수퍼클래스를 갖고 있다.
Rule 4. 모든 것은 메시지 발송에 의해 이루어 진다.
Rule 5. 메서드 검색(Method lookup)은 계층도 사슬(inheritance chanin)을 따른다.
우리가 이 장의 도입 부분에 언급하였듯이 규칙 1의 결과는 클래스 또한 오브젝트라는 것이므로, 규칙 2는 우리에게 클래스가 반드시 클래스의 인스턴스가 되어야 한다고 말합니다.
클래스의 클래스는 메타클레스(metaclass)로 불립니다. 메타클래스는 여러분이 클래스를 만들 때마다 여러분 자신을 위해 자동으로 만들어집니다. 여러분은 대부분의 경우 메타클래스에 대해 신경을 쓸 필요가 없습니다. 그럼에도 불구하고, 클래스의 “class side”를 검색하기 위해 시스템 브라우저(the system browser)를 사용할 때마다, 여러분이 실제로 다른 클래스(different class)를 검색하고 있으시다는 것을 상기하는 것이 도움이 됩니다. 클래스와 그것의 메타클래스는, 비록 전자가 후자의 인스턴스임에도 불구하고 두 개의 분리된 클래스입니다.
클래스와 메타클래스를 적합하게 설명하기 위해, 우리는 5장에 나온 규칙들을 다음 추가 규칙들로 확장할 필요가 있습니다.
Rule 6. 모든 클래스는 메타클래스의 인스턴스이다.
Rule 7. 메타클래스 계층도(hierarchy)는 클래스 계층도와 평행을 이룬다.
Rule 8. 모든 메타클래스는 클래스(Class)와 동작(Behavior)을 상속한다.
Rule 9. 모든 메타 클래스는(metaclass) 메타클래스의(Metaclass) 인스턴스이다.
Rule 10. 메타클래스의(Metaclass) 메타클래스는(metaclaas) 메타클래스의 인스턴스이다.
이 10개의 규칙들은 함께 스몰토크의 오브젝트 모델을 완성합니다.
우리는 먼저, 작은 예시와 함께 5장에서 다룬 5개의 규칙들을 간략하게 다시 볼 것입니다. 그 다음 우리는 동일한 예시를 사용하여 새로운 규칙들을 면밀히 살펴볼 것입니다.