E D R , A S I H C RSS

Self Delegation

Self Delegation

์•ž์žฅ์— ๋‚˜์˜จ ๋‘๊ฐ€์ง€ ์งˆ๋ฌธ์„ ์ƒ๊ธฐํ•ด๋ณด์ž. ์œ„์ž„ํ•œ ๊ฐ์ฒด์˜ ์ฃผ์ฒด์„ฑ์ด ํ•„์š”ํ•œ๊ฐ€? ์œ„์ž„ํ•œ ๊ฐ์ฒด์˜ ์ƒํƒœ๊ฐ€ ํ•„์š”ํ•œ๊ฐ€? ์ด ๋‘๊ฐ€์ง€์— yes๋ผ๊ณ  ๋Œ€๋‹ตํ•˜๋ฉด Simple Delegation์„ ์“ธ์ˆ˜ ์—†๋‹ค.
----
์œ„์ž„๋œ ๊ฐ์ฒด๊ฐ€ ์œ„์ž„ํ•˜๋Š” ๊ฐ์ฒด์— ์ ‘๊ทผํ•˜๋ ค๋ฉด ๊ฐ€์žฅ ์‰ฌ์šด ํ•œ๊ฐ€์ง€ ๋ฐฉ๋ฒ•์ด ์žˆ๊ธฐ๋Š” ํ•˜๋‹ค. ๋ฐ”๋กœ ์œ„์ž„ํ•˜๋Š” ๊ฐ์ฒด์˜ ์ฐธ์กฐ๋ฅผ ๊ฐ€์ง€๊ณ  ์žˆ์œผ๋ฉด ๋œ๋‹ค. ํ•˜์ง€๋งŒ ๋ณต์žกํ•ด์ง€๊ณ , ๊นจ์งˆ์ˆ˜๋„ ์žˆ๋‹ค.
----
์—ฌ๊ธฐ์„œ ์ œ์‹œํ•˜๋Š” ๋ฐฉ๋ฒ•์€, ์œ„์ž„ํ•˜๋Š” ๊ฐ์ฒด๋ฅผ ์ถ”๊ฐ€์ ์ธ ํŒŒ๋ผ๋ฉ”ํ„ฐ๋กœ ๋„˜๊ธฐ๋Š” ๊ฒƒ์ด๋‹ค. 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
Valid XHTML 1.0! Valid CSS! powered by MoniWiki
last modified 2021-02-07 05:28:00
Processing time 0.0038 sec