Self Delegation ¶
μμ₯μ λμ¨ λκ°μ§ μ§λ¬Έμ μκΈ°ν΄λ³΄μ. μμν κ°μ²΄μ 주체μ±μ΄ νμνκ°? μμν κ°μ²΄μ μνκ° νμνκ°? μ΄ λκ°μ§μ yesλΌκ³ λλ΅νλ©΄ Simple Delegationμ μΈμ μλ€.
----
μμλ κ°μ²΄κ° μμνλ κ°μ²΄μ μ κ·Όνλ €λ©΄ κ°μ₯ μ¬μ΄ νκ°μ§ λ°©λ²μ΄ μκΈ°λ νλ€. λ°λ‘ μμνλ κ°μ²΄μ μ°Έμ‘°λ₯Ό κ°μ§κ³ μμΌλ©΄ λλ€. νμ§λ§ 볡μ‘ν΄μ§κ³ , κΉ¨μ§μλ μλ€.
----
μ¬κΈ°μ μ μνλ λ°©λ²μ, μμνλ κ°μ²΄λ₯Ό μΆκ°μ μΈ νλΌλ©ν°λ‘ λκΈ°λ κ²μ΄λ€. forλΌλ μ΄λ¦μ μΆκ°μ μΈ νλΌλ©ν°λ‘ μμνλ κ°μ²΄λ₯Ό λκΈ°μ.
----
Self Delegationμ κ°μ₯ λ°μ΄λ μμ λ Visual Smalltalk 3.0μ Dictionaryꡬνμ΄λ€. Dictionaryλ κ°κ°μ μνμ λν΄ μ΅μ νλ HashTableμ μ¬λ¬κ° κ°μ§κ³ μλ€. μ΄λ, μκΈ° μμ (Dictionary)λ₯Ό λκ²¨μ£Όκ² λλ€.
μ΄μ§Έ C++μ΄ μ μ λ―Έμμ§λ€.
----
SBPPSummary
----
μμλ κ°μ²΄κ° μμνλ κ°μ²΄μ μ κ·Όνλ €λ©΄ κ°μ₯ μ¬μ΄ νκ°μ§ λ°©λ²μ΄ μκΈ°λ νλ€. λ°λ‘ μμνλ κ°μ²΄μ μ°Έμ‘°λ₯Ό κ°μ§κ³ μμΌλ©΄ λλ€. νμ§λ§ 볡μ‘ν΄μ§κ³ , κΉ¨μ§μλ μλ€.
----
μ¬κΈ°μ μ μνλ λ°©λ²μ, μμνλ κ°μ²΄λ₯Ό μΆκ°μ μΈ νλΌλ©ν°λ‘ λκΈ°λ κ²μ΄λ€. forλΌλ μ΄λ¦μ μΆκ°μ μΈ νλΌλ©ν°λ‘ μμνλ κ°μ²΄λ₯Ό λκΈ°μ.
----
Self Delegationμ κ°μ₯ λ°μ΄λ μμ λ Visual Smalltalk 3.0μ Dictionaryꡬνμ΄λ€. Dictionaryλ κ°κ°μ μνμ λν΄ μ΅μ νλ HashTableμ μ¬λ¬κ° κ°μ§κ³ μλ€. μ΄λ, μκΈ° μμ (Dictionary)λ₯Ό λκ²¨μ£Όκ² λλ€.
~cpp class Dictionary { ... void put(const T1& keyObject, const T2& valueObject) { hashTable.put(keyObject, valueObject, this); // λ¬Έλ² μλ§λκ±° κ°λ€. κ·Έλ₯ κ·Έλ°κ° λ³΄λ€ νμ. } };HashTableμ CollectionμΌλ‘ λ³΄λΈ λ©μΈμ§κ° λ±μ΄λΈ κ°μ κΈ°λ°μΌλ‘ ν΄μ¬κ°μ κ³μ°νλ€.
~cpp void HashTable::put(const T1& keyObject, const T2& valueObject, Dictionary* collection) { hash = collection->hashOf(keyObject); ... }μ΄μ hashOfλ₯Ό ν΄λ¦¬λͺ¨νΌμ¦μΌλ‘ ꡬνν μ μλ€.
~cpp HashTable& Dictionary::hashOf(const T& object) { return object.hash(); } HashTable& IdentityDictionary::hashOf(const T& object) { return object.basisHash(); }----
μ΄μ§Έ C++μ΄ μ μ λ―Έμμ§λ€.
----
SBPPSummary