<?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=Cpp%EC%97%90%EC%84%9C%EC%9D%98%EB%A9%A4%EB%B2%84%ED%95%A8%EC%88%98%EA%B5%AC%ED%98%84%EB%A9%94%EC%BB%A4%EB%8B%88%EC%A6%98</id>
	<title>Cpp에서의멤버함수구현메커니즘 - Revision history</title>
	<link rel="self" type="application/atom+xml" href="https://mediawiki.zeropage.org/index.php?action=history&amp;feed=atom&amp;title=Cpp%EC%97%90%EC%84%9C%EC%9D%98%EB%A9%A4%EB%B2%84%ED%95%A8%EC%88%98%EA%B5%AC%ED%98%84%EB%A9%94%EC%BB%A4%EB%8B%88%EC%A6%98"/>
	<link rel="alternate" type="text/html" href="https://mediawiki.zeropage.org/index.php?title=Cpp%EC%97%90%EC%84%9C%EC%9D%98%EB%A9%A4%EB%B2%84%ED%95%A8%EC%88%98%EA%B5%AC%ED%98%84%EB%A9%94%EC%BB%A4%EB%8B%88%EC%A6%98&amp;action=history"/>
	<updated>2026-05-15T21:46:26Z</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=Cpp%EC%97%90%EC%84%9C%EC%9D%98%EB%A9%A4%EB%B2%84%ED%95%A8%EC%88%98%EA%B5%AC%ED%98%84%EB%A9%94%EC%BB%A4%EB%8B%88%EC%A6%98&amp;diff=84261&amp;oldid=prev</id>
		<title>Maintenance script: Repair batch-0001 pages from live compare</title>
		<link rel="alternate" type="text/html" href="https://mediawiki.zeropage.org/index.php?title=Cpp%EC%97%90%EC%84%9C%EC%9D%98%EB%A9%A4%EB%B2%84%ED%95%A8%EC%88%98%EA%B5%AC%ED%98%84%EB%A9%94%EC%BB%A4%EB%8B%88%EC%A6%98&amp;diff=84261&amp;oldid=prev"/>
		<updated>2026-03-26T23:56:05Z</updated>

		<summary type="html">&lt;p&gt;Repair batch-0001 pages from live compare&lt;/p&gt;
&lt;table style=&quot;background-color: #fff; color: #202122;&quot; data-mw=&quot;interface&quot;&gt;
				&lt;col class=&quot;diff-marker&quot; /&gt;
				&lt;col class=&quot;diff-content&quot; /&gt;
				&lt;col class=&quot;diff-marker&quot; /&gt;
				&lt;col class=&quot;diff-content&quot; /&gt;
				&lt;tr class=&quot;diff-title&quot; lang=&quot;en&quot;&gt;
				&lt;td colspan=&quot;2&quot; style=&quot;background-color: #fff; color: #202122; text-align: center;&quot;&gt;← Older revision&lt;/td&gt;
				&lt;td colspan=&quot;2&quot; style=&quot;background-color: #fff; color: #202122; text-align: center;&quot;&gt;Revision as of 23:56, 26 March 2026&lt;/td&gt;
				&lt;/tr&gt;&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot; id=&quot;mw-diff-left-l161&quot;&gt;Line 161:&lt;/td&gt;
&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Line 161:&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;라는 함수는 각 instance의 id 라는 인자에 접근합니다.  &lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;라는 함수는 각 instance의 id 라는 인자에 접근합니다.  &lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;그러나  &lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;그러나  &lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;−&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt; ~cpp &lt;/del&gt;Foo::sayMyId()&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;&amp;lt;code&amp;gt;&lt;/ins&gt;Foo::sayMyId()&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;&amp;lt;/code&amp;gt;&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;같은 아무런 인자 없는 함수의 실행코드가 함수 선언 영역에 세팅된다면, id 라는 인자에 접근할수 없습니다.&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;같은 아무런 인자 없는 함수의 실행코드가 함수 선언 영역에 세팅된다면, id 라는 인자에 접근할수 없습니다.&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br/&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br/&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot; id=&quot;mw-diff-left-l169&quot;&gt;Line 169:&lt;/td&gt;
&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Line 169:&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;  Foo:sayMyId(Foo* x)&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;  Foo:sayMyId(Foo* x)&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;라는 형태의 함수로 선언하고, 실행할수 있도록 만듭니다. 그리고, 호출한다면  &lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;라는 형태의 함수로 선언하고, 실행할수 있도록 만듭니다. 그리고, 호출한다면  &lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;−&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt; ~cpp &lt;/del&gt;Foo*&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;&amp;lt;code&amp;gt;&lt;/ins&gt;Foo*&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;&amp;lt;/code&amp;gt;&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;부분에&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;부분에&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;  foo1-&amp;amp;gt;sayMyId(foo1);&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;  foo1-&amp;amp;gt;sayMyId(foo1);&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot; id=&quot;mw-diff-left-l197&quot;&gt;Line 197:&lt;/td&gt;
&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Line 197:&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;  My Id is no 3604872          // 객체 삭제(delete this)후 실행 코드&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;  My Id is no 3604872          // 객체 삭제(delete this)후 실행 코드&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;이렇게 나옵니다. (C++ 주석 빼고) 위에서 문제시 되는 부분은, 후반의 두가지  &lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;이렇게 나옵니다. (C++ 주석 빼고) 위에서 문제시 되는 부분은, 후반의 두가지  &lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;−&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt; ~cpp &lt;/del&gt;sayHello() 와 sayMyId()&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;&amp;lt;code&amp;gt;&lt;/ins&gt;sayHello() 와 sayMyId()&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;&amp;lt;/code&amp;gt;&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;일겁니다. 둘째 설명의 member 함수를 호출하는 메커니즘을 이해했다면&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;일겁니다. 둘째 설명의 member 함수를 호출하는 메커니즘을 이해했다면&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;  sayHello() -&amp;amp;gt; sayHello(Foo*)&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;  sayHello() -&amp;amp;gt; sayHello(Foo*)&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot; id=&quot;mw-diff-left-l204&quot;&gt;Line 204:&lt;/td&gt;
&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Line 204:&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br/&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br/&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;sayHello()는 instance variable에 접근하지 않는다는 것이고,  &lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;sayHello()는 instance variable에 접근하지 않는다는 것이고,  &lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;−&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt; ~cpp &lt;/del&gt;sayMyId()&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;&amp;lt;code&amp;gt;&lt;/ins&gt;sayMyId()&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;&amp;lt;/code&amp;gt;&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;는 접근한다는 점이지요.&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;는 접근한다는 점이지요.&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br/&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br/&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot; id=&quot;mw-diff-left-l242&quot;&gt;Line 242:&lt;/td&gt;
&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Line 242:&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;  }&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;  }&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;  public class Main {&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;  public class Main {&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;−&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;  	public static void main(String&lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;[] &lt;/del&gt;args) {&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;  	public static void main(String&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;&amp;amp;#91;&amp;amp;#93; &lt;/ins&gt;args) {&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;  		Foo foo= null;&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;  		Foo foo= null;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;  		foo.sayHello();&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;  		foo.sayHello();&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot; id=&quot;mw-diff-left-l256&quot;&gt;Line 256:&lt;/td&gt;
&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Line 256:&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;----&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;----&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;[[컬럼분류]]&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;[[컬럼분류]]&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;−&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;&lt;/del&gt;&lt;/div&gt;&lt;/td&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-added&quot;&gt;&lt;/td&gt;&lt;/tr&gt;

&lt;!-- diff cache key mediawiki:diff::1.12:old-30992:rev-84261 --&gt;
&lt;/table&gt;</summary>
		<author><name>Maintenance script</name></author>
	</entry>
	<entry>
		<id>https://mediawiki.zeropage.org/index.php?title=Cpp%EC%97%90%EC%84%9C%EC%9D%98%EB%A9%A4%EB%B2%84%ED%95%A8%EC%88%98%EA%B5%AC%ED%98%84%EB%A9%94%EC%BB%A4%EB%8B%88%EC%A6%98&amp;diff=30992&amp;oldid=prev</id>
		<title>imported&gt;rabierre at 17:47, 30 January 2013</title>
		<link rel="alternate" type="text/html" href="https://mediawiki.zeropage.org/index.php?title=Cpp%EC%97%90%EC%84%9C%EC%9D%98%EB%A9%A4%EB%B2%84%ED%95%A8%EC%88%98%EA%B5%AC%ED%98%84%EB%A9%94%EC%BB%A4%EB%8B%88%EC%A6%98&amp;diff=30992&amp;oldid=prev"/>
		<updated>2013-01-30T17:47:35Z</updated>

		<summary type="html">&lt;p&gt;&lt;/p&gt;
&lt;table style=&quot;background-color: #fff; color: #202122;&quot; data-mw=&quot;interface&quot;&gt;
				&lt;col class=&quot;diff-marker&quot; /&gt;
				&lt;col class=&quot;diff-content&quot; /&gt;
				&lt;col class=&quot;diff-marker&quot; /&gt;
				&lt;col class=&quot;diff-content&quot; /&gt;
				&lt;tr class=&quot;diff-title&quot; lang=&quot;en&quot;&gt;
				&lt;td colspan=&quot;2&quot; style=&quot;background-color: #fff; color: #202122; text-align: center;&quot;&gt;← Older revision&lt;/td&gt;
				&lt;td colspan=&quot;2&quot; style=&quot;background-color: #fff; color: #202122; text-align: center;&quot;&gt;Revision as of 17:47, 30 January 2013&lt;/td&gt;
				&lt;/tr&gt;&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot; id=&quot;mw-diff-left-l225&quot;&gt;Line 225:&lt;/td&gt;
&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Line 225:&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;  say Hello&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;  say Hello&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;과 같이 잘 동작합니다. 호출 형태가  &lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;과 같이 잘 동작합니다. 호출 형태가  &lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;−&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;  Foo::sayHello(&lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;foo3&lt;/del&gt;)  -&amp;amp;gt; Foo::sayHello(NULL)&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;  Foo::sayHello(&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;foo2&lt;/ins&gt;)  -&amp;amp;gt; Foo::sayHello(NULL)&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;이 된것이고, sayHello 내에는 pointer 값 NULL 을 이용한 접근이 없으므로 아무런 에러가 발생하지 않습니다.&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;이 된것이고, sayHello 내에는 pointer 값 NULL 을 이용한 접근이 없으므로 아무런 에러가 발생하지 않습니다.&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br/&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br/&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;/table&gt;</summary>
		<author><name>imported&gt;rabierre</name></author>
	</entry>
	<entry>
		<id>https://mediawiki.zeropage.org/index.php?title=Cpp%EC%97%90%EC%84%9C%EC%9D%98%EB%A9%A4%EB%B2%84%ED%95%A8%EC%88%98%EA%B5%AC%ED%98%84%EB%A9%94%EC%BB%A4%EB%8B%88%EC%A6%98&amp;diff=30991&amp;oldid=prev</id>
		<title>imported&gt;rabierre at 05:38, 28 January 2013</title>
		<link rel="alternate" type="text/html" href="https://mediawiki.zeropage.org/index.php?title=Cpp%EC%97%90%EC%84%9C%EC%9D%98%EB%A9%A4%EB%B2%84%ED%95%A8%EC%88%98%EA%B5%AC%ED%98%84%EB%A9%94%EC%BB%A4%EB%8B%88%EC%A6%98&amp;diff=30991&amp;oldid=prev"/>
		<updated>2013-01-28T05:38:07Z</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;__TOC__&lt;br /&gt;
&lt;br /&gt;
=== 문제 제기를 담은 설명 코드 ===&lt;br /&gt;
* 다음 소스에서는 die메소드에서 자신을 삭제해줍니다. 그런데. 삭제되고도 뻔뻔스럽게 자신의 메소드를 호출하네요. 어떻게 된것일까요? 알아봅시다.&lt;br /&gt;
 &lt;br /&gt;
 #include &amp;amp;lt;iostream&amp;amp;gt;&lt;br /&gt;
 using namespace std;&lt;br /&gt;
 &lt;br /&gt;
 class Foo{&lt;br /&gt;
 public:&lt;br /&gt;
 	int id;&lt;br /&gt;
 	Foo(){&lt;br /&gt;
 		static idSequance = 0;&lt;br /&gt;
 		id = idSequance++;&lt;br /&gt;
 		cout &amp;amp;lt;&amp;amp;lt; &amp;quot;Create! id = &amp;quot; &amp;amp;lt;&amp;amp;lt; id &amp;amp;lt;&amp;amp;lt; endl;&lt;br /&gt;
 	}&lt;br /&gt;
 	void die(){&lt;br /&gt;
 		cout &amp;amp;lt;&amp;amp;lt; &amp;quot;I suicide. Id is &amp;quot; &amp;amp;lt;&amp;amp;lt; id &amp;amp;lt;&amp;amp;lt; endl;&lt;br /&gt;
 		delete this;	// 자신 삭제&lt;br /&gt;
 	}&lt;br /&gt;
 	void sayMyId(){&lt;br /&gt;
 		cout &amp;amp;lt;&amp;amp;lt; &amp;quot;My Id is no &amp;quot; &amp;amp;lt;&amp;amp;lt; id &amp;amp;lt;&amp;amp;lt; endl;&lt;br /&gt;
 	}&lt;br /&gt;
 	void sayHello(){&lt;br /&gt;
 		cout &amp;amp;lt;&amp;amp;lt; &amp;quot;say Hello&amp;quot; &amp;amp;lt;&amp;amp;lt; endl;&lt;br /&gt;
 	}	&lt;br /&gt;
 };&lt;br /&gt;
 &lt;br /&gt;
 &lt;br /&gt;
 int main(int argc, char** argv)&lt;br /&gt;
 {	&lt;br /&gt;
 	cout &amp;amp;lt;&amp;amp;lt; endl &amp;amp;lt;&amp;amp;lt; &amp;quot;:::::: Case 1 - 동적할당 &amp;quot; &amp;amp;lt;&amp;amp;lt; endl;&lt;br /&gt;
 	Foo* foo1 = new Foo();// Create! 를 출력한다.&lt;br /&gt;
 	foo1-&amp;amp;gt;sayHello();		// Hello 출력&lt;br /&gt;
 	foo1-&amp;amp;gt;sayMyId();		// id 출력&lt;br /&gt;
 	foo1-&amp;amp;gt;die();		// 객체 삭제&lt;br /&gt;
 	foo1-&amp;amp;gt;sayHello();		// 동작 가능&lt;br /&gt;
 	foo1-&amp;amp;gt;sayMyId();		// 동작 가능&lt;br /&gt;
 	&lt;br /&gt;
 &lt;br /&gt;
 	// id 확인차&lt;br /&gt;
 	cout &amp;amp;lt;&amp;amp;lt; endl &amp;amp;lt;&amp;amp;lt; &amp;quot;:::::: Case 2 - id 확인&amp;quot; &amp;amp;lt;&amp;amp;lt; endl;&lt;br /&gt;
 	Foo* foo2 = new Foo();// Create! 를 출력한다.&lt;br /&gt;
 	foo2-&amp;amp;gt;sayHello();		// Hello World 출력&lt;br /&gt;
 	foo2-&amp;amp;gt;sayMyId();		// id 출력&lt;br /&gt;
 	foo2-&amp;amp;gt;die();			&lt;br /&gt;
 	foo2-&amp;amp;gt;sayHello();&lt;br /&gt;
 	foo2-&amp;amp;gt;sayMyId();		&lt;br /&gt;
 	&lt;br /&gt;
 	cout &amp;amp;lt;&amp;amp;lt; endl &amp;amp;lt;&amp;amp;lt; &amp;quot;:::::: Case 3 - 포인터 NULL로 하고 메소드 호출하기 &amp;quot; &amp;amp;lt;&amp;amp;lt; endl;&lt;br /&gt;
 	Foo* foo3 = NULL;		//  자세한 설명보세요.		&lt;br /&gt;
 	foo3-&amp;amp;gt;sayHello();		// Hello 를 출력한다.&lt;br /&gt;
 	//foo3-&amp;amp;gt;sayMyId();		// debug, release 모두 동작할 수 없다. &lt;br /&gt;
 	//foo3-&amp;amp;gt;die();		// debug, release 모두 동작할 수 없다.	&lt;br /&gt;
 &lt;br /&gt;
 	cout &amp;amp;lt;&amp;amp;lt; endl &amp;amp;lt;&amp;amp;lt; &amp;quot;:::::: Case3 - 지역변수로 선언&amp;quot; &amp;amp;lt;&amp;amp;lt; endl;&lt;br /&gt;
 	Foo foo4;&lt;br /&gt;
 	foo4.sayHello();		// Hello World 출력&lt;br /&gt;
 	foo4.sayMyId();		// id 출력&lt;br /&gt;
 	foo4.die();		// debug mode에서 assertion error&lt;br /&gt;
 	foo4.sayHello();		// release 에서 동작 가능&lt;br /&gt;
 	foo4.sayMyId();		// release 에서 동작 가능&lt;br /&gt;
 	cout &amp;amp;lt;&amp;amp;lt; endl;&lt;br /&gt;
 &lt;br /&gt;
 	return 0;&lt;br /&gt;
 }&lt;br /&gt;
결과는 다음과 같이 출력됩니다. 비교해보면서, 생각해 보고 이해가지 않는다면 자세한 설명을 보세요.&lt;br /&gt;
 :::::: Case 1 - 동적할당&lt;br /&gt;
 Create! id = 0&lt;br /&gt;
 say Hello&lt;br /&gt;
 My Id is no 0&lt;br /&gt;
 I suicide. Id is 0&lt;br /&gt;
 say Hello&lt;br /&gt;
 My Id is no 3604872&lt;br /&gt;
 &lt;br /&gt;
 :::::: Case 2 - id 확인&lt;br /&gt;
 Create! id = 1&lt;br /&gt;
 say Hello&lt;br /&gt;
 My Id is no 1&lt;br /&gt;
 I suicide. Id is 1&lt;br /&gt;
 say Hello&lt;br /&gt;
 My Id is no 3604872&lt;br /&gt;
 &lt;br /&gt;
 :::::: Case 3 - 포인터 NULL로 하고 메소드 호출하기&lt;br /&gt;
 say Hello&lt;br /&gt;
 &lt;br /&gt;
 :::::: Case3 - 지역변수로 선언&lt;br /&gt;
 Create! id = 2&lt;br /&gt;
 say Hello&lt;br /&gt;
 My Id is no 2&lt;br /&gt;
 I suicide. Id is 2&lt;br /&gt;
 say Hello&lt;br /&gt;
 My Id is no 2&lt;br /&gt;
 &lt;br /&gt;
 Press any key to continue&lt;br /&gt;
&lt;br /&gt;
=== 각각의 경우에 따른 테스트 ===&lt;br /&gt;
==== Case1 - 동적할당 ====&lt;br /&gt;
 	Foo* foo1 = new Foo();	// Create! 를 출력한다.&lt;br /&gt;
 	foo1-&amp;amp;gt;sayHello();		// Hello World 출력&lt;br /&gt;
 	foo1-&amp;amp;gt;sayMyId();		// id 출력&lt;br /&gt;
 	foo1-&amp;amp;gt;die();		// 죽였다.	&lt;br /&gt;
 	foo1-&amp;amp;gt;sayHello();		// 호출이 된다?&lt;br /&gt;
 	foo1-&amp;amp;gt;sayMyId();		// 이것도..--;&lt;br /&gt;
==== Case2 - 포인터 NULL로 하고 메소드 호출하기 ====&lt;br /&gt;
 	Foo* foo2 = NULL;		// 자세한 설명보세요.		&lt;br /&gt;
 	foo2-&amp;amp;gt;sayHello();		// Hello 를 출력한다.(음--;)&lt;br /&gt;
 	foo2-&amp;amp;gt;sayMyId();		// debug, release 모두 동작할 수 없다. &lt;br /&gt;
 	foo2-&amp;amp;gt;die();		// debug, release 모두 동작할 수 없다.	&lt;br /&gt;
==== Case3 - 지역변수로 선언 ====&lt;br /&gt;
 	Foo foo3;&lt;br /&gt;
 	foo3.sayHello();		// Hello World 출력&lt;br /&gt;
 	foo3.sayMyId();		// id 출력&lt;br /&gt;
 	foo3.die();		// debug mode에서 assertion error&lt;br /&gt;
 	foo3.sayHello();		// release 에서 동작 가능&lt;br /&gt;
 	foo3.sayMyId();		// release 에서 동작 가능&lt;br /&gt;
&lt;br /&gt;
DeleteMe 이렇게 보이는 것도 좋지만, &amp;#039;&amp;#039;&amp;#039;실행할수 있는 완전한 소스&amp;#039;&amp;#039;&amp;#039; 형태를 제시하는 편이 더 좋을것 같습니다. --NeoCoin&lt;br /&gt;
=== 자세한 설명 ===&lt;br /&gt;
위의 &amp;quot;간단한 설명=코드&amp;quot;를 인용하면서 설명합니다.&lt;br /&gt;
&lt;br /&gt;
C++의 목표는 기존 C의 성능을 해하지 않으면서 OOP를 섞는 것입니다. 필연적으로 OOP적 사고에서 용납하기 어려운 코드를 실행할 수 있습니다. OOP를 C의 구현 위에서 해야 됩니다.&lt;br /&gt;
&lt;br /&gt;
이 이상하게 보이는 코드를 이해하기 위해서는 C++의 원론적인 배경지식이 필요합니다. &lt;br /&gt;
* 첫째로, C++의 클래스와 인스턴스 생성을 알아봅시다. &lt;br /&gt;
* 둘째로, 인스턴스에 귀속된 멤버 함수들을 실행하는 것을 생각해 보겠습니다. &lt;br /&gt;
* 마지막으로, 위의 문제제기에 대해 분석해 봅시다.&lt;br /&gt;
&lt;br /&gt;
==== C++에서 클래스의 선언과 인스턴스의 생성입니다. ====&lt;br /&gt;
자신이 컴파일러가 되었다고 가정해 봅시다. 우리가 class를 선언하고 컴파일하려면 프로그램의 영역에 class 의 Data 들을 저장할 수 있는 &amp;quot;class 틀&amp;quot;의 정보를 담아 놓을 곳이 필요합니다. &lt;br /&gt;
 class Foo{&lt;br /&gt;
 public:&lt;br /&gt;
     int id;  // &amp;amp;lt;- 이 부분의 정보 입니다.&lt;br /&gt;
 };&lt;br /&gt;
C++은 Strong typed language 이므로 컴파일 시간에 모든 형이 선언되고, 사용되는 것을 검증할 수 있습니다. 하지만 이는 다음과 같은 지역 변수에 국한합니다. &lt;br /&gt;
 Foo foo4; &lt;br /&gt;
new 키워드로 할당시에는 runtime 에 class 의 instance 를 찍어 낼수 있어야 합니다. 이를 위해 프로그램 안에는 위의 id가 int 라는 정보를 담는 class의 &amp;quot;class 틀&amp;quot; 정보를 담는 곳이 필요합니다. &lt;br /&gt;
&lt;br /&gt;
여기까지가, class 와 struct 키워드가 하는 동일한 작업입니다. 그리고, class 에는 몇가지 더 생각해야 하는데, 그중 하나가 foo 를 이용해서 어떠한 member 함수를 호출할 수 있는가 입니다. &lt;br /&gt;
&lt;br /&gt;
그러나, 컴파일러인 우리는 이 정보를 지역 변수이든, new 로 할당이든 컴파일 시간에 인자의 type을 보고 함수 호출 유효성을 확인하고, 적절한 함수 포인터를 함수 호출하는 부분에 넣어 줄수 있습니다. 그리고 실행할 수 있는데 이 과정을 두번째에서 설명합니다.&lt;br /&gt;
&lt;br /&gt;
그외 class와 instance의 생성시 vpt와, 상속 관계에 대한 pointer 정보가 더 들어 가야 합니다. 그러나 여기에서는 생각하지 않습니다. 둘째로 넘어갑니다&lt;br /&gt;
&lt;br /&gt;
==== instance 에 귀속된 멤버 함수들을 실행해 봅시다. ====&lt;br /&gt;
자 계속 우리는 컴파일러 입니다. 컴파일러인 우리는 member 함수 호출 부분을 함수의 실행코드를 가리키는 함수 포인터로 모두 교체하였습니다. 그리고 인간으로 돌아옵시다.&lt;br /&gt;
&lt;br /&gt;
C++ 표준안에서 전역에서 함수 호출과, instance에 귀속된 멤버 함수들의 호출을 가리지 않습니다. 함수 선언과 멤버 함수 선언의 함수 실행 코드는 모두 동일 방법으로 선언되고, 모두 동일한 메커니즘의 함수 포인터를 이용해서 호출합니다.&lt;br /&gt;
&lt;br /&gt;
이러한 전제라면, 한가지 의문이 생깁니다. &lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;전역 함수와 동일한 함수 선언의 형태라면 각각의 instance에 어떻게 접근하는가?&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
무슨 소리냐 하면,&lt;br /&gt;
 class Foo{&lt;br /&gt;
 public: &lt;br /&gt;
 	int id;&lt;br /&gt;
 	void sayMyId(){&lt;br /&gt;
 		cout &amp;amp;lt;&amp;amp;lt; &amp;quot;My Id is no &amp;quot; &amp;amp;lt;&amp;amp;lt; id &amp;amp;lt;&amp;amp;lt; endl;&lt;br /&gt;
 	}&lt;br /&gt;
 };&lt;br /&gt;
라는 함수는 각 instance의 id 라는 인자에 접근합니다. &lt;br /&gt;
그러나 &lt;br /&gt;
 ~cpp Foo::sayMyId()&lt;br /&gt;
같은 아무런 인자 없는 함수의 실행코드가 함수 선언 영역에 세팅된다면, id 라는 인자에 접근할수 없습니다.&lt;br /&gt;
&lt;br /&gt;
C++ 에서는 이런 한계를 class 에 귀속된 함수들의 처음 인자로 해당 class 의 포인터를 묵시적으로 선언해서 해결하고 있습니다. 즉,&lt;br /&gt;
 Foo:sayMyId()&lt;br /&gt;
라는 함수 실행 코드가 함수 영역에 선언될때 컴파일러가&lt;br /&gt;
 Foo:sayMyId(Foo* x)&lt;br /&gt;
라는 형태의 함수로 선언하고, 실행할수 있도록 만듭니다. 그리고, 호출한다면 &lt;br /&gt;
 ~cpp Foo*&lt;br /&gt;
부분에&lt;br /&gt;
 foo1-&amp;amp;gt;sayMyId(foo1);&lt;br /&gt;
형태로 함수 포인터를 세팅해서 함수 코드를 실행합니다.&lt;br /&gt;
&lt;br /&gt;
C++은 이러한 다소 황당한 수로 C와의 컴파일시 호환성을 지키면서 OOP를 구현합니다.&lt;br /&gt;
&lt;br /&gt;
 사족. 이러한 사연이 class내에서 static 멤버 함수를 선언하고 instance에서 호출할때 instance 의 멤버 변수에 접근하지 못하는 이유가 됩니다. static 함수로 선언 하면 묵시적으로 pointer 를 세팅하지 않고 함수를 호출합니다.&lt;br /&gt;
     &lt;br /&gt;
이런 배경 지식을 바탕으로 다음으로 넘어갑니다.&lt;br /&gt;
&lt;br /&gt;
==== 위의 문제제기에 대해 분석해 봅시다. ====&lt;br /&gt;
다음과 같은 코드를 실행하면,&lt;br /&gt;
 	Foo* foo1 = new Foo();	// Create! 를 출력한다.&lt;br /&gt;
 	foo1-&amp;amp;gt;sayHello();		// Hello 출력&lt;br /&gt;
 	foo1-&amp;amp;gt;sayMyId();		// id 출력&lt;br /&gt;
 	foo1-&amp;amp;gt;die();		// 객체 삭제&lt;br /&gt;
 	foo1-&amp;amp;gt;sayHello();		// 동작 가능&lt;br /&gt;
 	foo1-&amp;amp;gt;sayMyId();		// 동작 가능&lt;br /&gt;
&lt;br /&gt;
이렇게 나옵니다.(윈도우즈 플랫폼에서)&lt;br /&gt;
 Create! id = 0&lt;br /&gt;
 say Hello&lt;br /&gt;
 My Id is no 0&lt;br /&gt;
 I suicide. Id is 0&lt;br /&gt;
 say Hello                    // 객체 삭제(delete this)후 실행 코드&lt;br /&gt;
 My Id is no 3604872          // 객체 삭제(delete this)후 실행 코드&lt;br /&gt;
이렇게 나옵니다. (C++ 주석 빼고) 위에서 문제시 되는 부분은, 후반의 두가지 &lt;br /&gt;
 ~cpp sayHello() 와 sayMyId()&lt;br /&gt;
일겁니다. 둘째 설명의 member 함수를 호출하는 메커니즘을 이해했다면&lt;br /&gt;
 sayHello() -&amp;amp;gt; sayHello(Foo*)&lt;br /&gt;
 sayMyId() -&amp;amp;gt; sayMyId(Foo*) &lt;br /&gt;
형태로 호출된다는 것을 짐작할 수 있을 겁니다. 하지만 두 함수는 다른 점이 있습니다.&lt;br /&gt;
&lt;br /&gt;
sayHello()는 instance variable에 접근하지 않는다는 것이고, &lt;br /&gt;
 ~cpp sayMyId()&lt;br /&gt;
는 접근한다는 점이지요.&lt;br /&gt;
&lt;br /&gt;
따라서, 삭제후에 메모리를 청소(?) 해버리고 난후 해당 instance 부분을 실행해 보리니 id가 다음과 같이 엉뚱하게 나오지요.&lt;br /&gt;
 say Hello                    객체 삭제(delete this)후 실행 코드&lt;br /&gt;
 My Id is no 3604872          객체 삭제(delete this)후 실행 코드&lt;br /&gt;
instance에 사용되었던 메모리는, 해당 process의 가용 메모리로 돌아가지, 접근 금지 영역으로 세팅되지 않습니다.  이 부분은 delete this 시 해당 instance 영역의 값을 어떻게 &amp;quot;청소&amp;quot;하느냐에 따라서, 플랫폼 별로 다르게 나옵니다. &lt;br /&gt;
그리고 &lt;br /&gt;
 delete x&lt;br /&gt;
라는 코드는 x의 값을 변화시키지 않습니다. 변화시킬수 없습니다. 이유는 call by value 로 넘어온 x의 값을 NULL로 변경시켜봤자, 영향 받지 않는 코드가 경우가 있기 때문에, 변화시킬 필요성이 없습니다.&lt;br /&gt;
&lt;br /&gt;
만약 구현 컴파일러가, 메모리를 system으로 반환하고 접근 금지 영역으로 설정한다면, 다음 강제 접근시 access 에러가 나겠지요. 이러한 비효율적 구현 플랫폼 없을 겁니다.&lt;br /&gt;
&lt;br /&gt;
foo2~3 이러한 배경 지식을 이용해서 결과를 이해할수 있는 보충 설명입니다. &lt;br /&gt;
&lt;br /&gt;
그 중 foo2는 C++에서 볼수 있는 웃긴 예제지요. (foo3도 웃기지만)&lt;br /&gt;
 	Foo* foo2 = NULL;		//  자세한 설명보세요.		&lt;br /&gt;
 	foo2-&amp;amp;gt;sayHello();		// Hello 를 출력한다.&lt;br /&gt;
이 코드의 결과는&lt;br /&gt;
 say Hello&lt;br /&gt;
과 같이 잘 동작합니다. 호출 형태가 &lt;br /&gt;
 Foo::sayHello(foo3)  -&amp;amp;gt; Foo::sayHello(NULL)&lt;br /&gt;
이 된것이고, sayHello 내에는 pointer 값 NULL 을 이용한 접근이 없으므로 아무런 에러가 발생하지 않습니다.&lt;br /&gt;
&lt;br /&gt;
OOP적인 사고로 실행할 instance가 없으므로 불가능한 코드지만, 잘 실행됩니다. C++에서 함수 실행시 해당 instance의 존재 유무를 검사하지 않습니다. 검사 할 수도 없겠지요. NULL 조차 0 이라는 pointer 값에 해당하니까요.&lt;br /&gt;
=== 정리 ===&lt;br /&gt;
* C++ 에서 class 의 멤버 함수를 호출할때 멤버 함수의 첫인자를 해당 class 의 instance pointer 로 묵시적으로 선언되고 호출된다.&lt;br /&gt;
* 위의 호출시에 pointer 의 유효성은 확인하지 않는다.&lt;br /&gt;
=== 덧붙여 Java에서 비슷한 코드를 봅시다. ===&lt;br /&gt;
instance 유무를 검사하는 Java 코드를 봅시다.&lt;br /&gt;
 // Main.java file&lt;br /&gt;
 class Foo{&lt;br /&gt;
 	public int a;&lt;br /&gt;
 	void sayHello(){&lt;br /&gt;
 		System.out.println(&amp;quot;Hello&amp;quot;);&lt;br /&gt;
 	}&lt;br /&gt;
 }&lt;br /&gt;
 public class Main {&lt;br /&gt;
 	public static void main(String[] args) {&lt;br /&gt;
 		Foo foo= null;&lt;br /&gt;
 		foo.sayHello();&lt;br /&gt;
 	}&lt;br /&gt;
 }&lt;br /&gt;
이를 실행하면, 다음과 같은 exception을 출력합니다. 이는 [http://java.sun.com/docs/books/jls/second_edition/html/j.title.doc.html Java Language Specification 2nd] (3rd가 아직 안나왔군요.) 와 [http://java.sun.com/docs/books/vmspec/2nd-edition/html/VMSpecTOC.doc.html jvm specification]을 참고하세요.&lt;br /&gt;
(실행시점에 null 값인지 검사하고, 필요시 instance pool에서 instance를 pointer를 이용해서 접근하는 것으로 기억합니다. )&lt;br /&gt;
 java.lang.NullPointerException&lt;br /&gt;
 	at Main.main(Main.java:19)&lt;br /&gt;
 Exception in thread &amp;quot;main&amp;quot; &lt;br /&gt;
&lt;br /&gt;
C++에서는 NULL 이 키워드로 존재하지 않고, 0 이라고 확실히 약속되어 있지 않기 때문에 검사자체가 불가능합니다.그러나 vm상의 언어들은 그래서 모두 null에 해당하는 키워드가 존재하고 검사가 가능합니다.&lt;br /&gt;
----&lt;br /&gt;
[[컬럼분류]]&lt;br /&gt;
&lt;/div&gt;</summary>
		<author><name>imported&gt;rabierre</name></author>
	</entry>
</feed>