E D R , A S I H C RSS

Constructor Method

Constructor Method

μΈμŠ€ν„΄μŠ€λΌ λ§Œλ“€λ•Œ κ°€μž₯ μœ μ—°ν•œ 방법은 "new" λ©”μ†Œλ“œ 뒀에닀가 μ—¬λŸ¬ λ©”μ„Έμ§€λΌ λ³΄λ‚΄μ£ΌλŠ” 것이닀.
~cpp 
class Point
{
/* ... */
	void setXnY(int x, int y) { /* ... */ }
/* ... */
};

Point* pt = new Point;
pt->setXnY(0,0); // C++/Java라면 μ΄λ ‡κ²Œ μ“Έ 일은 μ—†λ‹€.
ν•˜μ§€λ§Œ 이 방법은 μ“Έλ§Œν•œ μΈμŠ€ν„΄μŠ€λΌ λ§Œλ“€κΈ° μœ„ν•΄ 클래슀의 λ ˆνΌλŸ°μŠ€λΌ μ°Ύμ•„λ΄μ•Ό ν•˜λŠ” λ“±μ˜ 골치 μ•„ν”ˆ λ¬Έμ œκ°€ μžˆλ‹€. 특히 ν΄λž˜μŠ€κ°€ λ³΅μž‘ν• λ•ŒλŠ” λ¬Έμ œκ°€ μ€ μ»€μ§„λ‹€.

κ·Έλž˜μ„œ Constructor MethodλΌ μ“°κΈ°λΌ κΆŒν•œλ‹€. 즉 μΈμŠ€ν„΄μŠ€λΌ λ˜‘λ°”λ‘œ λ§Œλ“€μ–΄μ£ΌλŠ” 각각의 λ©”μ†Œλ“œλΌ μΆ”κ°€ν•΄μ£ΌλŠ” 것이닀.
ν•œκ°€μ§€ 예둜 μœ„μ˜ 것을 고쳐보자.
~cpp 
class Point
{
/* ... */
	void setXnY(int x, int y) { /* ... */ }
	static Point* makeFromXnY(int x, int y)
	{
		Point* pt = new Point;
		pt->setXnY(x,y);
		return pt;
	}
/* ... */
};

Point* pt = Point::makeFromXnY(0,0);
λ˜λ‹€λ₯Έ 예둜 λ°˜μ§€λ¦„κ³Ό κ°λ„λΌ λ°›μ•„ x,yλΌ κ³„μ‚°ν•΄μ£ΌλŠ” Constructor methodλΌ λ§Œλ“€μ–΄λ³΄μž.
~cpp 
class Point
{
/* ... */
	void setXnY(int x, int y) { /* ... */ }
	static Point* makeFromXnY(int x, int y)	{ /* ... */ }
	static Point* makeFromRnTheta(int r, int theta)
	{
		return makeFromXnY(r*cos(theta),r*sin(theta));
	}
/* ... */
};
ν•˜μ§€λ§Œ 이 νŒ¨ν„΄μ€ C++/Javaμ—μ„œλŠ” λ³„λ‘œ ν•„μš”κ°€ 없을λ“ν•˜λ‹€. μƒμ„±μžμ˜ μ˜€λ²„λ‘œλ”©μ„ μ–Έμ–΄ μ°¨μ›μ—μ„œ μ§€μ›ν•΄μ£ΌλŠ”λ° ꡳ이 μ“Έ ν•„μš”κ°€ μžˆλ‚˜ ν•˜λŠ” 생각이 λ“ λ‹€. ν•˜μ§€λ§Œ 슀λͺ°ν† ν¬μ—μ„œλŠ” newλΌ μ˜€λ²„λ‘œλ”©ν•˜λŠ”κ±Έ 그리 λ°˜κ²¨ν•˜λŠ”κ²ƒ κ°™μ§€λŠ” μ•Šλ‹€.

''DesignPatterns 둜 μ΄μ•ΌκΈ°ν•œλ‹€λ©΄ μΌμ’…μ˜ FactoryMethod μž„.(μ™„μ „νžˆ λ§€μΉ˜λ˜λŠ”κ±΄ μ•„λ‹ˆκ³ , μ–΄λŠμ •λ„ λΉ„μŠ·) 비ꡐ적 자주 μ‚¬μš©λ˜λŠ” νŒ¨ν„΄μΈλ°, μ™œλƒν•˜λ©΄ κ°μ²΄λΌ μƒμ„±ν•˜κ³  각각 μž„μ˜λ‘œ μ…‹νŒ…ν•΄μ£ΌλŠ” 일을 μƒμ„±μž μ˜€λ²„λ‘œλ”©μ„ λ”ν•˜μ§€ μ•Šκ³ μ„œλ„ ν•  수 μžˆμœΌλ‹ˆκΉŒ.
μš”μƒˆ ν”„λ‘œκ·Έλž˜λ° ν•˜λ©΄μ„œ λŠλΌλŠ” 점은, κ³Όλ„ν•œ μ˜€λ²„λ‘œλ”©μ€ ν•΄λ‹Ή κ°μ²΄λΌ μ΄μš©ν•˜λŠ” μ‚¬λžŒμž…μž₯μ—μ„œ κ³¨μΉ˜μ•„ν”„κ²Œ λ§Œλ“ λ‹€λŠ”κ²ƒ. μ™œλƒν•˜λ©΄, 같은 λ©”μ†Œλ“œ μ΄λ¦„μ—μ„œλŠ” ν•΄λ‹Ή νŒŒλΌλ©”ν„°κ°€ λ‹€λ₯Έ κ²ƒμœΌλ‘œ λ°”λ€Œμ—ˆμ„λ•Œμ— λŒ€ν•œ μ˜λ„λΌ λ©”μ†Œλ“œ 이름에 λ“œλŸ¬λ‚˜μ§€ μ•ŠκΈ° λ•Œλ¬Έμ—.
κ°œμΈμ μœΌλ‘œλŠ” JUnit Test μž‘μ„±ν• λ•Œ, Test λŒ€μƒμ΄ λ˜λŠ” ν΄λž˜μŠ€μ— λŒ€ν•œ λ¦¬νŒ©ν† λ§ μ‹œλ„ν•˜λŠ”μ€‘ 쀑간단계 μ—­ν• λ‘œ 많이 μ¨λ¨Ήμ—ˆμŒ.

ps. 슀λͺ°ν† ν¬μ—μ„œλŠ” μ˜€λ²„λ‘œλ”©μ΄ μ—†λŠ” 걸둜 μ•Œκ³  있음. --1002''
음.. μ˜€λ²„λ‘œλ”©μ΄ μ—†λ‚˜μš”? 보면 newλž‘ new:μ΄λ ‡κ²Œ λ‘κ°œ μžˆλŠ” ν΄λž˜μŠ€λ„ 있던데... 저건 μ•„μ˜ˆ λ‹€λ₯Έ λ©”μ„Έμ§€μΈκ°€μš”? --인수


Valid XHTML 1.0! Valid CSS! powered by MoniWiki
last modified 2021-02-07 05:23:00
Processing time 0.0166 sec