<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
	<id>https://mediawiki.zeropage.org/index.php?action=history&amp;feed=atom&amp;title=DoubleDispatch</id>
	<title>DoubleDispatch - Revision history</title>
	<link rel="self" type="application/atom+xml" href="https://mediawiki.zeropage.org/index.php?action=history&amp;feed=atom&amp;title=DoubleDispatch"/>
	<link rel="alternate" type="text/html" href="https://mediawiki.zeropage.org/index.php?title=DoubleDispatch&amp;action=history"/>
	<updated>2026-05-14T14:01:58Z</updated>
	<subtitle>Revision history for this page on the wiki</subtitle>
	<generator>MediaWiki 1.39.8</generator>
	<entry>
		<id>https://mediawiki.zeropage.org/index.php?title=DoubleDispatch&amp;diff=31423&amp;oldid=prev</id>
		<title>imported&gt;Unknown at 05:23, 7 February 2021</title>
		<link rel="alternate" type="text/html" href="https://mediawiki.zeropage.org/index.php?title=DoubleDispatch&amp;diff=31423&amp;oldid=prev"/>
		<updated>2021-02-07T05:23:09Z</updated>

		<summary type="html">&lt;p&gt;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;New page&lt;/b&gt;&lt;/p&gt;&lt;div&gt;== DoubleDispatch ==&lt;br /&gt;
Integer라는 클래스와 Float라는 클래스가 있다. 두 객체 간의 덧셈을 구현하고 싶다. 몇개를 구현해야할까? 4개다. 즉, Integer + Integer, Float + Float, Integer + Float, Float + Integer이렇게 말이다. 이를 해결하기 위한 절차적 방법은 모든 상황을 거대한 case 구문에 넣는 것이다. 이것은 한군데에다가 로직을 다 넣을 수 있다는 장점이 있음에도 불구하고, 유지보수가 어렵다.&lt;br /&gt;
우리의 해결책은, 계산에 연관된 두 객체를 얻어오는 메세지의 계층을 추가하는 것이다.(?) 이것은 많은 메세지를 만들게 되지만, 그 복잡함의 가치가 있다.&lt;br /&gt;
----&lt;br /&gt;
argument에 메세지를 보내라. selector에다가 receiver의 클래스 네임을 덧붙인다. receiver를 argument로 넘긴다. 이 패턴을 사용한 후의 Integer, Float 코드는 다음과 같다.&lt;br /&gt;
 Integer Integer::operator+(const Number&amp;amp;amp; aNumber)&lt;br /&gt;
 {&lt;br /&gt;
 	return aNumber.addInteger(this);&lt;br /&gt;
 }&lt;br /&gt;
 &lt;br /&gt;
 Float Float::operator+(const Number&amp;amp;amp; aNumber)&lt;br /&gt;
 {&lt;br /&gt;
 	return aNumber.addFloat(this);&lt;br /&gt;
 }&lt;br /&gt;
 &lt;br /&gt;
 Integer Integer::addInteger(const Integer&amp;amp;amp; anInteger)&lt;br /&gt;
 {&lt;br /&gt;
 	return Integer(this + anInteger);&lt;br /&gt;
 }&lt;br /&gt;
 &lt;br /&gt;
 Float Float::addFloat(const Float&amp;amp;amp; aFloat)&lt;br /&gt;
 {&lt;br /&gt;
 	return Float(this + aFloat);&lt;br /&gt;
 }&lt;br /&gt;
 &lt;br /&gt;
 Float Integer::addFloat(const Float&amp;amp;amp; aFloat)&lt;br /&gt;
 {&lt;br /&gt;
 	return asFloat().addFloat(aFloat); // Integer를 Float로 바꿔준 다음 계산&lt;br /&gt;
 }&lt;br /&gt;
 &lt;br /&gt;
 Integer Float::addInteger(const Integer&amp;amp;amp; anInteger)&lt;br /&gt;
 {&lt;br /&gt;
 	return addFloat(anInteger.asFloat());&lt;br /&gt;
 }&lt;br /&gt;
----&lt;br /&gt;
역시 완벽한 이해는 못했다. 좀 더 봐야 할듯 싶다.&lt;br /&gt;
----&lt;br /&gt;
=== 읽어보고 정리해야 할 사이트들 ===&lt;br /&gt;
* http://www.object-arts.com/EducationCentre/Patterns/DoubleDispatch.htm&lt;br /&gt;
* http://eewww.eng.ohio-state.edu/~khan/khan/Teaching/EE894U_SP01/PDF/DoubleDispatch.PDF&lt;br /&gt;
* http://www-ekp.physik.uni-karlsruhe.de/~schemitz/Diploma/html/diploma/node85.html&lt;br /&gt;
* http://www.chimu.com/publications/short/javaDoubleDispatching.html&lt;br /&gt;
* http://no-smok.net/seminar/moin.cgi/DoubleDispatch&lt;br /&gt;
 &lt;br /&gt;
[[MoreEffectiveC++]] 에서 [http://zeropage.org/wiki/MoreEffectiveC_2b_2b_2fTechniques3of3#head-a44e882d268553b0c56571fba06bdaf06618f2d0 Item31] 에서도 언급됨.&lt;br /&gt;
----&lt;br /&gt;
[[SBPPSummary]]&lt;br /&gt;
&lt;/div&gt;</summary>
		<author><name>imported&gt;Unknown</name></author>
	</entry>
</feed>