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