Simple Delegation ¶
μμμ μ¬μ©ν λ, λΉμ μ΄ νμν μμμ λ¬λ―Έ(?)λ₯Ό λΆλͺ
νκ² ν΄μ£Όλ λμμ£Όλ λκ°μ§ μ΄μκ° μλ€. νλλ, μμνλ κ°μ²΄μ 주체μ±μ΄ μ€μνκ°? μ΄λ€. μμλ κ°μ²΄λ μμ μ μ‘΄μ¬λ₯Ό μλ¦¬κ³ μΆμ§ μμΌλ―λ‘ μμν κ°μ²΄λ‘μ μ κ·Όμ΄ νμνλ€.(?) λ€λ₯Έ νλλ, μμνλ κ°μ²΄μ μνκ° μμλ κ°μ²΄μκ² μ€μνκ²μΈκ°? κ·Έλ λ€λ©΄ μμλ κ°μ²΄λ μΌμ μννκΈ° μν΄ μμν κ°μ²΄μ μνκ° νμνλ€.(λ무 μ΄μνλ€.) μ΄ λκ°μ§μ noλΌκ³ λλ΅ν μ μμΌλ©΄ Simple Delegationμ μΈ μ μλ€.
κ·Έλ₯ μμ λ 보μ.-_- λ΄κ° λ΄λ λ¬΄μ¨ λ§μΈμ§ λͺ¨λ₯΄κ² λ€.
Collectionμ²λΌ μλνμ§λ§ λ λ§μ κΈ°λ₯μ κ°μ§κ³ μλ κ°μ²΄λ₯Ό λ§λ€κ³ μΆλ€. μμλ°μ§ λ§κ³ , Collectionμ μ§μΉνλλ‘ νμ.(μμνλλ‘ νμ.)
~cpp class Vector { private: Array* elements; public: Vector(int size) { setElements(new Array(size)); } void setElements(Array* aCollection) { elements = aCollection; } void do( (void*) blockFunc() ) { elements->do(blockFunc); // Arrayμκ²λ‘ μμ } };μ’ μ΄μνκΈ΄ νμ§λ§ κ·Έλ₯ κ·Έλ°κ° λ³΄λ€ νμ. C++μ λ무 μ μ½μ΄ μ¬νλ€. μ΄μ¨λ at, at: put: κ°μ λ©μΈμ§λ μμ²λΌ μμμ΄ κ°λ₯νλ€.
μμνλ κ°μ²΄(delegating object)λ μμ κ°μ²΄ λλ μμμ κ°μ²΄, μμλ κ°μ²΄(delegate)λ λ리μλ‘ λ²μν μ μμ κ² κ°κ³ (μ°¨λΌλ¦¬ μμ΄λ₯Ό κ·Έλλ‘ μ°λκ² μ’μμ§λ λͺ¨λ₯΄κ² λ€μ), 주체μ±μ μ°Έμ‘°λ₯Ό μλ―Ένμ§ μμκΉμ?
κ°μ²΄μ 주체μ±(?)μ λν μλ₯Ό λ€λ©΄(μ λλ‘ μ΄ν΄νλμ§λ μλͺ¨λ₯΄κ² μ§λ§... ^^;)
~cpp // μ±ν λ°©μμ λκ°κΈ° μν΄ νΈμΆλμ΄μΌ ν λ©μλ ChatClient::GoOutFromRoom() { Cmd* cmd = new OutFromRoomCmd(this); cmd->Execute(this); // delegating objectμ μ°Έμ‘°(this)λ₯Ό delegateμκ² μ λ¬ }
μ΄λ° μμΌλ‘ μλ²μκ² μ°Έμ‘°λ₯Ό μ λ¬νκ³ μλ²λ λκ° λ³΄λΈ λ©μμ§μΈμ§λ₯Ό μκΈ° λλ¬Έμ μ²λ¦¬ κ²°κ³Όλ₯Ό ν΄λΉ ν΄λΌμ΄μΈνΈμκ² λ³΄λ
λλ€. ν΄λΌμ΄μΈνΈλ μλ²κ° λ³΄λΈ μ²λ¦¬ κ²°κ³Όκ° μ±κ³΅μ΄λ©΄ UIλ₯Ό μ
λ°μ΄νΈνκ³ μ€ν¨νλ©΄ λ©μμ§λ₯Ό 보μ¬μ€λ€κ±°λ νμλ μμΌλ‘ μ²λ¦¬ν μ μμκΊΌ κ°λ€μ.--Benghun