SqueakByExample:12.1: Difference between revisions

From 흡혈양파의 번역工房
Jump to navigation Jump to search
mNo edit summary
(번역수정)
(One intermediate revision by the same user not shown)
Line 1: Line 1:
==클래스(class)와 메타클래스(metaclass)의 규칙들==
==클래스와 메타클래스의 규칙==


스몰토크 오브젝트 모델은 일정하게 적용된 제한된 수의 개념들에 기초합니다. 스몰토크의 디자이너들은 Occam의 razor를 적용하였습니다: 필요한 것보다 좀더 복잡한 모델로 이끄는 모든 고려사항들은 폐기됩니다.
스몰토크의 객체 모델은 적은수의 개념이 동일하게 적용되며 구성되어 있습니다. 스몰토크의 설계자는 Occam 의 면도칼로 불리는 규칙을 사용하고 있습니다: 필요 이상으로 모델을 복잡하게 만드는 것들은 사용하지 않는다는거죠.


여러분의 기억을 상기시켜드리기 위해, 우리가 5장에서 살펴본 오브젝트 모델들의 규칙들을 다음과 같이 기록하였습니다.
5 장에서 배운 객체 모델의 규칙를 기억해보도록 하겠습니다.


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


'''Rule 1.''' 모든 것은 오브젝트이다.<br>
 
'''Rule 2.''' 모든 오브젝트는 클래스의 인스턴스 이다.<br>
이 장의 도입부분에서 얘기했습니다만, Rule 1 의 결과는 클래스도 객체라는 의미이고, Rule 2 는 클래스 역시 반드시 어떠한 클래스의 인스턴스라는것을 의미합니다.
'''Rule 3.''' 모든 클래스는 수퍼클래스를 갖고 있다.<br>
'''Rule 4.''' 모든 것은 메시지 발송에 의해 이루어 진다.<br>
'''Rule 5.''' 메서드 검색(Method lookup)은 계층도 사슬(inheritance chanin)을 따른다.




우리가 이 장의 도입 부분에 언급하였듯이 규칙 1의 결과는 클래스 또한 오브젝트라는 것이므로, 규칙 2는 우리에게 클래스가 반드시 클래스의 인스턴스가 되어야 한다고 말합니다.  
클래스의 클래스를 메타클래스 라고 합니니다. 메타클래스는 사용자가 클래스를 정의할때마다 스몰토크 시스템에서 자동으로 만들어집니다. 평상시에 메타클래스를 신경쓸 필요는  없습니다. 하지만, 시스템브라우저에서 "class side" 를 선택하는경우, 사실은 다른 클래스를 보고있다는것을 생각해주시기 바랍니다<ref name="역자주1">system browser 에서 class side 를 누르면 보이는 부분이 사실은 class 의 define 된 부분이 아니라 해당되는 class 의 meta class 인 instace 를 보고있다는 의미인것 같습니다</ref>. 클래스와 메타클래스는, 메타클래스가 클래스의 인스턴스라는점을 제외하면 각각 다른 클래스인것으로 생각해주세요.


클래스의 클래스는 메타클레스(metaclass)로 불립니다. 메타클래스는 여러분이 클래스를 만들 때마다 여러분 자신을 위해 자동으로 만들어집니다. 여러분은 대부분의 경우 메타클래스에 대해 신경을 쓸 필요가 없습니다. 그럼에도 불구하고, 클래스의 “class side”를 검색하기 위해 시스템 브라우저(the system browser)를 사용할 때마다, 여러분이 실제로 다른 클래스(different class)를 검색하고 있으시다는 것을 상기하는 것이 도움이 됩니다. 클래스와 그것의 메타클래스는, 비록 전자가 후자의 인스턴스임에도 불구하고 두 개의 분리된 클래스입니다.


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




'''Rule 6.''' 모든 클래스는 메타클래스의 인스턴스이다.<br>
'''Rule 6.''' 모든 클래스는 메타클래스의 인스턴스이다.<br>
'''Rule 7.''' 메타클래스 계층도(hierarchy)는 클래스 계층도와 평행을 이룬다.<br>
'''Rule 7.''' 메타클래스 계층은 클래스 계층도와 평행을 이룬다.<br>
'''Rule 8.''' 모든 메타클래스는 클래스(Class)와 동작(Behavior)을 상속한다.<br>
'''Rule 8.''' 모든 메타클래스는 Class 의 동작을 상속한다.<br>
'''Rule 9.''' 모든 메타 클래스는(metaclass) 메타클래스의(Metaclass) 인스턴스이다.<br>
'''Rule 9.''' 모든 메타클래스는 Metaclass 인스턴스이다.<br>
'''Rule 10.''' 메타클래스의(Metaclass) 메타클래스는(metaclaas) 메타클래스의 인스턴스이다.
'''Rule 10.''' Metaclass 메타클래스는 Metaclass의 인스턴스이다.
 
 
이상의 10 개의 규칙이 스몰토크의 객체모델을 이루는 근간이 됩니다.


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


이 10개의 규칙들은 함께 스몰토크의 오브젝트 모델을 완성합니다.


우리는 먼저, 작은 예시와 함께 5장에서 다룬 5개의 규칙들을 간략하게 다시 볼 것입니다. 그 다음 우리는 동일한 예시를 사용하여 새로운 규칙들을 면밀히 살펴볼 것입니다.


==Notes==
==Notes==

Revision as of 11:30, 16 September 2013

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

스몰토크의 객체 모델은 적은수의 개념이 동일하게 적용되며 구성되어 있습니다. 스몰토크의 설계자는 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 의 define 된 부분이 아니라 해당되는 class 의 meta class 인 instace 를 보고있다는 의미인것 같습니다