SqueakByExample:12.1

From 흡혈양파의 번역工房
Jump to navigation Jump to search

클래스와 메타클래스의 규칙

스몰토크의 객체 모델은 적은수의 개념이 동일하게 적용되며 구성되어 있습니다. 스몰토크의 설계자는 Occam 의 면도칼로 불리는 규칙을 사용하고 있습니다: 필요 이상으로 모델을 복잡하게 만드는 것들은 사용하지 않는다는거죠.

5 장에서 배운 객체 모델의 규칙를 기억해보도록 하겠습니다.

Rule 1. 모든 요소는 객체이다.
Rule 2. 모든 객체는 클래스의 인스턴스 이다.
Rule 3. 모든 클래스는 super 클래스를 갖고 있다.
Rule 4. 모든 것은 메시지 발송에 의해 이루어 진다.
Rule 5. 메서드 검색은 상속 관계를 따른다.


이 장의 도입부분에서 얘기했습니다만, Rule 1 의 결과는 클래스도 객체라는 의미이고, Rule 2 는 클래스 역시 반드시 어떠한 클래스의 인스턴스라는것을 의미합니다.


클래스의 클래스를 메타클래스 라고 합니니다. 메타클래스는 사용자가 클래스를 정의할때마다 스몰토크 시스템에서 자동으로 만들어집니다. 평상시에 메타클래스를 신경쓸 필요는 없습니다. 하지만, 시스템브라우저에서 "class side" 를 선택하는경우, 사실은 다른 클래스를 보고있다는것을 생각해주시기 바랍니다[1]. 클래스와 메타클래스는, 메타클래스가 클래스의 인스턴스라는점을 제외하면 각각 다른 클래스인것으로 생각해주세요.


클래스와 메타클래스를 보다 적절하게 설명하기 위해, 5 장에 나온 규칙들을 다음의 추가 규칙들로 확장할 필요가 있습니다.


Rule 6. 모든 클래스는 메타클래스의 인스턴스이다.
Rule 7. 메타클래스 계층은 클래스 계층과 평행관계이다.
Rule 8. 모든 메타클래스는 Class 의 동작을 상속한다.
Rule 9. 모든 메타클래스는 Metaclass 의 인스턴스이다.
Rule 10. Metaclass 의 메타클래스는 Metaclass의 인스턴스이다.


이상의 10 개의 규칙이 스몰토크의 객체모델을 이루는 근간이 됩니다.

일단 5 장에서 언급한 5 개의 규칙을 간단한 예제와 함께 살펴보겠습니다. 그리고 같은 예제를 이용해서 추가된 규칙을 자세히 살펴보겠습니다.


Notes

  1. system browser 에서 class side 를 누르면 보이는 부분이 class 의 instance 인 metaclass 라는 의미인거 같습니다.