SqueakByExample:12.3

From 흡혈양파의 번역工房
Revision as of 14:02, 17 August 2012 by Onionmixer (talk | contribs) (SBE 모든클래스는메타클래스의인스턴스입니다 페이지 추가)
(diff) ← Older revision | Latest revision (diff) | Newer revision → (diff)
Jump to navigation Jump to search

모든 클래스는 메타 클래스의 인스턴스입니다.

우리가 섹션 12.1에 언급하였듯이, 클래스의 인스턴스들이 그 자체가 되는 클래스들을 메타 클래스라 부릅니다.

메타클래스는 묵시적(implicit)입니다. 메타클래스는 여러분이 클래스를 정의할 때 자동으로 생성됩니다. 우리는 프로그래머들이 메타클래스에 관해 결코 염려할 필요가 없기 때문에, 그것들을 묵시적이라고 말합니다. 묵시적 메타클래스(an implicit metaclass)는 여러분이 만든 각 클래스를 위해 생성되므로, 각 메타클래스는 오직 한 개의 인스턴스를 갖고 있습니다.

보통 클래스(ordinary)가 글로벌 변수(global variables)에 의해 작명되는 반면에, 메타 클래스는 익명입니다. 그럼에도 불구하고, 우리가 항상 메타클래스를 언급할 때, 그 메타클래스의 인스턴스인 클래스의 이름을 통해 메타클래스를 지칭합니다. 예를 들면 Color의 클래스는 Color class이며 Object의 class는 Object class입니다:

Color class        Color class
Object class        Object class


그림 12.3은 각 클래스가 어떻게 그 클래스의 (익명) 메타클래스(metaclass)의 인스턴스 인지를 보여드립니다.

그림 12.3: 불투명(Translucent)의 메타클래스(metaclasses)와 그것의 수퍼클래스(superclasses)


클래스 또한 오브젝트이며, 메시지를 발송하여, 그것은 우리가 그 클래스를 조회하기 쉽게 만들어 드립니다.. 이제 이 클래스들을 살펴봅시다:

Color subclasses        {TranslucentColor}
TranslucentColor subclasses        #()
TranslucentColor allSuperclasses        an OrderedCollection(Color ObjectProtoObject)
TranslucentColor instVarNames        #('alpha')
TranslucentColor allInstVarNames        #('rgb' 'cachedDepth' 'cachedBitPattern' 'alpha')
TranslucentColor selectors        an IdentitySet(#alpha:
    #asNontranslucentColor #privateAlpha #pixelValueForDepth: #isOpaque
    #isTranslucentColor #storeOn: #pixelWordForDepth: #scaledPixelValue32 #alpha
    #bitPatternForDepth: #hash #convertToCurrentVersion:refStream:
    #isTransparent #isTranslucent #setRgb:alpha: #balancedPatternForDepth:
    #storeArrayValuesOn:)

Notes