<?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=ConstructorMethod</id>
	<title>ConstructorMethod - Revision history</title>
	<link rel="self" type="application/atom+xml" href="https://mediawiki.zeropage.org/index.php?action=history&amp;feed=atom&amp;title=ConstructorMethod"/>
	<link rel="alternate" type="text/html" href="https://mediawiki.zeropage.org/index.php?title=ConstructorMethod&amp;action=history"/>
	<updated>2026-05-14T19:05:00Z</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=ConstructorMethod&amp;diff=30827&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=ConstructorMethod&amp;diff=30827&amp;oldid=prev"/>
		<updated>2021-02-07T05:23:00Z</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;=== Constructor Method ===&lt;br /&gt;
인스턴스를 만들때 가장 유연한 방법은 &amp;quot;new&amp;quot; 메소드 뒤에다가 여러 메세지를 보내주는 것이다. &lt;br /&gt;
 class Point&lt;br /&gt;
 {&lt;br /&gt;
 /* ... */&lt;br /&gt;
 	void setXnY(int x, int y) { /* ... */ }&lt;br /&gt;
 /* ... */&lt;br /&gt;
 };&lt;br /&gt;
 &lt;br /&gt;
 Point* pt = new Point;&lt;br /&gt;
 pt-&amp;amp;gt;setXnY(0,0); // C++/Java라면 이렇게 쓸 일은 없다.&lt;br /&gt;
하지만 이 방법은 쓸만한 인스턴스를 만들기 위해 클래스의 레퍼런스를 찾아봐야 하는 등의 골치 아픈 문제가 있다. 특히 클래스가 복잡할때는 문제가 좀 커진다.&lt;br /&gt;
----&lt;br /&gt;
그래서 Constructor Method를 쓰기를 권한다. 즉 인스턴스를 똑바로 만들어주는 각각의 메소드를 추가해주는 것이다. &lt;br /&gt;
한가지 예로 위의 것을 고쳐보자.&lt;br /&gt;
 class Point&lt;br /&gt;
 {&lt;br /&gt;
 /* ... */&lt;br /&gt;
 	void setXnY(int x, int y) { /* ... */ }&lt;br /&gt;
 	static Point* makeFromXnY(int x, int y)&lt;br /&gt;
 	{&lt;br /&gt;
 		Point* pt = new Point;&lt;br /&gt;
 		pt-&amp;amp;gt;setXnY(x,y);&lt;br /&gt;
 		return pt;&lt;br /&gt;
 	}&lt;br /&gt;
 /* ... */&lt;br /&gt;
 };&lt;br /&gt;
 &lt;br /&gt;
 Point* pt = Point::makeFromXnY(0,0);&lt;br /&gt;
또다른 예로 반지름과 각도를 받아 x,y를 계산해주는 Constructor method를 만들어보자.&lt;br /&gt;
 class Point&lt;br /&gt;
 {&lt;br /&gt;
 /* ... */&lt;br /&gt;
 	void setXnY(int x, int y) { /* ... */ }&lt;br /&gt;
 	static Point* makeFromXnY(int x, int y)	{ /* ... */ }&lt;br /&gt;
 	static Point* makeFromRnTheta(int r, int theta)&lt;br /&gt;
 	{&lt;br /&gt;
 		return makeFromXnY(r*cos(theta),r*sin(theta));&lt;br /&gt;
 	}&lt;br /&gt;
 /* ... */&lt;br /&gt;
 };&lt;br /&gt;
하지만 이 패턴은 C++/Java에서는 별로 필요가 없을듯하다. 생성자의 오버로딩을 언어 차원에서 지원해주는데 굳이 쓸 필요가 있나 하는 생각이 든다. 하지만 스몰토크에서는 new를 오버로딩하는걸 그리 반겨하는것 같지는 않다.&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;DesignPatterns 로 이야기한다면 일종의 FactoryMethod 임.(완전히 매치되는건 아니고, 어느정도 비슷) 비교적 자주 사용되는 패턴인데, 왜냐하면 객체를 생성하고 각각 임의로 셋팅해주는 일을 생성자 오버로딩을 더하지 않고서도 할 수 있으니까. &lt;br /&gt;
요새 프로그래밍 하면서 느끼는 점은, 과도한 오버로딩은 해당 객체를 이용하는 사람입장에서 골치아프게 만든다는것. 왜냐하면, 같은 메소드 이름에서는 해당 파라메터가 다른 것으로 바뀌었을때에 대한 의도를 메소드 이름에 드러나지 않기 때문에.&lt;br /&gt;
개인적으로는 JUnit Test 작성할때, Test 대상이 되는 클래스에 대한 리팩토링 시도하는중 중간단계 역할로 많이 써먹었음. &lt;br /&gt;
&lt;br /&gt;
ps. 스몰토크에서는 오버로딩이 없는 걸로 알고 있음. --&amp;amp;#91;1002&amp;amp;#93;&amp;#039;&amp;#039;&lt;br /&gt;
 음.. 오버로딩이 없나요? 보면 new랑 new:이렇게 두개 있는 클래스도 있던데... 저건 아예 다른 메세지인가요? --[[인수]]&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
[[SBPPSummary]]&lt;br /&gt;
&lt;/div&gt;</summary>
		<author><name>imported&gt;Unknown</name></author>
	</entry>
</feed>