SlideShare a Scribd company logo
์ธํ„ฐํŽ˜์ด์Šค๋กœ ํ”„๋กœ๊ทธ๋ž˜๋ฐํ•˜๊ธฐ๊ทธ๋ฆฌ๊ณ  ๋ช‡ ๊ฐœ์˜ ์ƒ์„ฑํŒจํ„ด(1/2)์•„๊ฟˆ์‚ฌ10.06.19์ž„์ •ํ™˜
์™œ extends๊ฐ€ ๋‚˜์œ๊ฐ€?extend๋Š”  OO์–ธ์–ด์—์„œ ์ค‘์š”ํ•œ ๊ธฐ๋Šฅ์„ ์ฐจ์ง€๋”ฐ๋ผ์„œ extend๋ฅผ ์“ด๋‹ค๋ฉด ๋ญ”๊ฐ€ OO์ ์ธ ๊ฒƒ์„ ํ•˜๊ณ  ์žˆ๊ตฌ๋‚˜~ ํ•˜๊ณ  ์ƒ๊ฐํ•˜๋ฉด์„œ ์—ฌ๊ธฐ์ €๊ธฐ ๋ง‰ ์“ฐ๋Š” ๊ฒŒ ๋ฌธ์ œ(๊ทธ๋Ÿฌ๋‚˜ ์ด extends๋Š” ๋ถ€์ž‘์šฉ์ด ์ฐธ ๋งŽ๋‹ค)๊ฐ์ฒด ์ง€ํ–ฅ์ด๋ž€! ๋™์ผํ•œ ํƒ€์ž…์— ๋‹ค์–‘ํ•œ ๊ตฌํ˜„์„ ์ œ๊ณตํ•˜๋Š” ๋‹คํ˜•์„ฑ(๊ธฐ๋ฐ˜ ํด๋ž˜์Šค์˜ ํ–‰๋™์„ ์ด๋ฅผ ์ƒ์†ํ•œ ํด๋ž˜์Šค์—์„œ ์žฌ์ •์˜ ํ•˜๋Š” ๊ฒƒ)์ด ๊ฐ์ฒด ์ง€ํ–ฅ ์‚ฌ๊ณ ์˜ ํ•ต์‹ฌ!์ด๋Ÿฐ ๋‹คํ˜•์„ฑ์€ extends ๋ณด๋‹ค๋Š” implements(์ธํ„ฐํŽ˜์ด์Šค)๋ฅผ ํ†ตํ•ด ๊ฐ€์žฅ ์ž˜ ์„ฑ์ทจํ•  ์ˆ˜ ์žˆ์Œ!(์•ž์œผ๋กœ ๊ณ„์† ์„ค๋ช…ํ•  ๊ฒƒ์ž„)
์ธํ„ฐํŽ˜์ด์Šค vsํด๋ž˜์Šค๊ตฌํ˜„ ์ƒ์†๋ณด๋‹จ ์ธํ„ฐํŽ˜์ด์Šค ์ƒ์†์ด ํ›จ์”ฌ ๋ฐ”๋žŒ์ง์œ ์—ฐ์„ฑ์˜ ์ƒ์‹ค๊ตฌํ˜„ ์ƒ์†์ด ๋‚˜์œ์ด์œ ๋Š”๋ฒ ์ด์Šค ํด๋ž˜์Šค์˜ ํ•จ์ˆ˜๊ฐ€ ์ด๋ฏธ ๊ตฌํ˜„๋˜์–ด ์žˆ๊ธฐ ๋•Œ๋ฌธ์— ์ด ๊ตฌํ˜„์— ์ข…์†์ ์ผ ์ˆ˜ ๋ฐ–์— ์—†๊ธฐ ๋•Œ๋ฌธ!๊ฒฐ๊ณผ์ ์œผ๋กœ ์ˆ˜์ •์ด ํž˜๋“ฌ!์• ์ž์ผ ๊ฐœ๋ฐœ ๋ฐฉ๋ฒ•๋ก ์˜ ํ•ต์‹ฌ์ค‘ ํ•˜๋‚˜๋Š” ๋””์ž์ธ๊ณผ ๊ฐœ๋ฐœ์„ ๋ณ‘ํ–‰! ์™„๋ฒฝํ•œ ์š”๊ตฌ ์‚ฌํ•ญ ๋„์ถœ ์ด์ „์— ํ”„๋กœ๊ทธ๋ž˜๋ฐ ์‹œ์ž‘.. ์ฆ‰ ์ž์ฃผ ๊ณ ์ณ์•ผ ๋œ๋‹ค๋Š” ์‚ฌ์‹ค! ์œ ์—ฐํ•œ ํ”„๋กœ๊ทธ๋žจ์ด ์•„๋‹ˆ๋ผ๋ฉด ๋ณ‘ํ–‰ ๊ฐœ๋ฐœ์€ ๋ถˆ๊ฐ€๋Šฅ!
์ธํ„ฐํŽ˜์ด์Šค vsํด๋ž˜์Šค(์˜ˆ์ œ1)void f(){LinkedList list = new LinkedList();	//...	modify(list);}void modify(LinkedList list){list.add(...);doSomethingWith(list);}์˜ต๋น !.. LinkedList์ฆ์ด์—์š”.. HastSet์œผ๋กœ ๋ฐ”๊ฟ”์ฃผ์„ธ์š” ๋‹˜ํ•˜โ€ฆ
์ธํ„ฐํŽ˜์ด์Šค vsํด๋ž˜์Šค(์˜ˆ์ œ1)void f(){LinkedList list = new LinkedList();	//...	modify(list);}void modify(LinkedList list){list.add(...);doSomethingWith(list);}๊ณ ์ณ์•ผ ํ•  ๊ณณ์ด ์ ์  ๋Š”๋‹ค.
์ธํ„ฐํŽ˜์ด์Šค vsํด๋ž˜์Šค(์˜ˆ์ œ1)void f(){	Collection list = new LinkedList();	//...	modify(list);}void modify(Collection list){list.add(...);doSomethingWith(list);}
์ธํ„ฐํŽ˜์ด์Šค vsํด๋ž˜์Šค(์˜ˆ์ œ1)void f(){	Collection list = new Hashset();	//...	modify(list);}void modify(Collection list){list.add(...);doSomethingWith(list);}ํ•œ ๊ณณ๋งŒ ๋ฐ”๊พธ๋ฉด ๋œ๋‹ค.
์ธํ„ฐํŽ˜์ด์Šค vsํด๋ž˜์Šค(์˜ˆ์ œ2)f(){	Collection c = new Hashset();	//...	examine(c);}void examine(Collection c){	for(Iteratori = c.iterator(); i.hasNext();)		//i.next() ํ†ตํ•ด ์›์†Œ๋ฅผ ์ˆœํšŒ}f(){	Collection c = new Hashset();	//...	examine(c.iterator());}void examine(Iteratori){	for(; i.hasNext();)		//i.next()๋ฅผ ํ†ตํ•ด ์›์†Œ๋ฅผ ์ˆœํšŒ}Iterator๋ฅผ ๋ฐ›๊ธฐ ๋•Œ๋ฌธ์— Collection์œผ๋กœ๋Š” ์ฒ˜๋ฆฌ๋ชปํ•˜๋Š”Map๋„ ์ฒ˜๋ฆฌ ๊ฐ€๋ŠฅIterator๋ฅผ ์˜ค๋ฒ„๋ผ์ด๋”ฉํ•˜์—ฌ ๋‹ค๋ฅด๊ฒŒ ์ˆœํšŒํ•˜๋Š” ๊ธฐ๋Šฅ ๊ฐ€๋Šฅ์ผ๋ฐ˜ํ™”๋œ ๋ฒ„์ „์€ ์ˆ˜์ •์—†์ด ์ด๋Ÿฌํ•œ ๋ชจ๋“  ๋ณ€ํ™”๊ฐ€ ์ˆ˜์šฉ๊ฐ€๋Šฅ!!์œ ์—ฐํ•˜๊ตฌ๋‚˜!!
๊ฒฐํ•ฉ๋„๊ฒฐํ•ฉ์ด ์—†๋Š” ํ”„๋กœ๊ทธ๋žจ์ด๋ž€ ์กด์žฌํ•˜์ง€ ์•Š์ง€๋งŒโ€ฆ..ํ”„๋กœ๊ทธ๋žจ์—์„œ ์ฝ”๋“œ๊ฐ„์˜ ๊ฒฐํ•ฉ๋„๊ฐ€ ๋‚ฎ์„์ˆ˜๋ก ์ข‹๋‹ค.์ „์—ญ ๋ณ€์ˆ˜๊ฐ€ ๋‚˜์œ์ด์œ !(๊ฐ•ํ•œ ๊ฒฐํ•ฉ)์ „์—ญ ๋ณ€์ˆ˜์˜ ํƒ€์ž…์„ ๋ฐ”๊พผ๋‹ค๊ณ  ์ƒ๊ฐํ–‡์„๋•Œ ์ด ๋ณ€์ˆ˜๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๋ชจ๋“  ์ฝ”๋“œ๋ฅผ ๊ฒ€์‚ฌ,์ˆ˜์ •,์ œํ…Œ์ŠคํŠธํ•ด์•ผํ•จ
๊ฒฐํ•ฉ๋„OO ๊ฐœ๋…์„ ์ถฉ์‹คํžˆ ์ง€ํ‚ค๋ฉด ๊ฒฐํ•ฉ๋„๋ฅผ ์ค„์ผ ์ˆ˜ ์žˆ๋‹ค..์ƒ์ˆ˜๋ฅผ ์ œ์™ธํ•œ ๋ชจ๋“  ํ•„๋“œ๋Š” private๋กœ!get, set์€ ์ค„์—ฌ๋ผ..(public์ด๋‚˜ ์ง„๋ฐฐ์—†์Œ)๋‚˜์ค‘์— ์œ ์ง€๋ณด์ˆ˜์‹œ ํŽธ๋ฆฌํ•จ
๊นจ์ง€๊ธฐ ์‰ฌ์šด ๊ธฐ๋ฐ˜ ํด๋ž˜์Šค ๋ฌธ์ œ๊ตฌํ˜„ ์ƒ์†์€ ์ž์‹๊ณผ ๋ถ€๋ชจ ํด๋ž˜์Šค๊ฐ„ ๊ฐ•ํ•œ ๊ฒฐํ•ฉ์„ ์˜๋ฏธ๋ถ€๋ชจ๋ฅผ ์กฐ๊ธˆ ์ˆ˜์ •ํ–ˆ์Œ์—๋„ ์ž์‹์ด ๋ง๊ฐ€์งˆ ์ˆ˜ ์žˆ์Œ
๊นจ์ง€๊ธฐ ์‰ฌ์šด ๊ธฐ๋ฐ˜ ํด๋ž˜์Šค ๋ฌธ์ œ(์˜ˆ์ œ) class Stack extends ArrayList{	private inttopOfStack = 0;	public void push(Object article)	{		add(topOfStack++, article);	}	public Object pop()	{		return remove(--topOfStack);	}	public void pushMany(Object[] articles)	{		for(inti =0; i < articles.length; ++i)			push(articles[i]);	}}//์Šคํƒ์˜ํ˜„์žฌ ์œ„์น˜๋ฅผ ์ €์žฅํ•˜๋Š” topOfStack๋ฅผ ์ •์˜ํ•จStack aStack = new Stack();aStack.push("1");aStack.push("2");aStack.clear(); //clear๋Š” ArrayList Method๋Œ€๋žต ๋‚ญํŒจ.. topOfStack์€ 0์ด ์•ˆ๋จ๊ฐœ๋ง..!์ƒ์†์„ ํ•˜๊ฒŒ ๋˜๋ฉด ์›ํ•˜์ง€ ์•Š๋˜ ๋ฉ”์†Œ๋“œclear() ๊นŒ์ง€ ๋ชจ๋‘ ์ƒ์†ํ•˜๊ฒŒ ๋จ
๊นจ์ง€๊ธฐ ์‰ฌ์šด ๊ธฐ๋ฐ˜ ํด๋ž˜์Šค ๋ฌธ์ œ(์˜ˆ์ œ)ArrayList๋ฅผ ์ƒ์†ํ•œ ๊ฒƒ ์ž์ฒด๊ฐ€ ๊ฐœ๋…์ ์œผ๋กœ  ๋ง์ด์•ˆ๋จStack is ArrayList๊ฐ€ ์•„๋‹ˆ๋‹ค..์–ด๋–ป๊ฒŒ ๊ณ ์น ๊นŒ?Clear()์—์„œ ์˜ˆ์™ธ๋ฅผ ๋˜์ €๋ฒ„๋ฆฌ์ž!์ด๊ฑด ์ปดํŒŒ์ผ ์—๋Ÿฌ๋ฅผ ๋Ÿฐํƒ€์ž„ ์—๋Ÿฌ๋กœ ์˜ฎ๊ฒจ ๋ฒ„๋ฆฌ๋Š” ๋งํ•  ๋†ˆ์˜ ์ƒ๊ฐtopOfStack๋Œ€์‹  size()๋ฉ”์†Œ๋“œ ์ด์šฉ์ด๊ฑด clear()๋งŒ ์–ด๋–ป๊ฒŒ ๊ณ ์ณ๋ณด๊ฒ ๋‹ค๋Š”์ƒ๊ฐ๋‹ค๋ฅธ ํ•จ์ˆ˜์—์„œ ๊ฐœ๋งโ€ฆ. (ex. removeRange..)์ง€๊ธˆ ์ƒํ™ฉ์—์„œ ์ƒ์†์€ ์–ดํ๊ฐ€ ์žˆ๋‹ค..์ƒ์†๋Œ€์‹  ํ•ฉ์„ฑ์„ ์ด์šฉํ•˜์ž!!!
๊นจ์ง€๊ธฐ ์‰ฌ์šด ๊ธฐ๋ฐ˜ ํด๋ž˜์Šค ๋ฌธ์ œ(์˜ˆ์ œ)class Stack{private inttopOfStack = 0;private ArrayListtheData = new ArrayList();public void push(Object article){theData.add(topOfStack++, article);}public Object pop(){	return theData.remove(--topOfStack);}public void pushMany(Object[] articles){for(inti =0; i < articles.length;++i)	push(articles[i]);}public int size(){	return theData.size();}}์ƒ์†ํ•˜์ง€ ์•Š๊ณ  ArrayList๋ฅผ ์ด์šฉํ•˜์—ฌ ๊ตฌํ˜„ํ•˜์˜€๋‹ค.์ด์ œ ArrayList๊ฐ€ ์ˆ˜์ •๋˜๋Š” ์ผ์ด ์ƒ๊ฒจ๋„ ๊ฐœ๋งํ•˜๋Š” ์ผ์€ ์—†์–ด์ง!๋ณ€๊ฒฝ์— ๊ฐ•ํ•ด์ง~
๊นจ์ง€๊ธฐ ์‰ฌ์šด ๊ธฐ๋ฐ˜ ํด๋ž˜์Šค ๋ฌธ์ œ(์˜ˆ์ œ)class MonitorableStack extends Stack{private inthighWaterMark = 0;private intlowWaterMark = 0;public void push(Object o){push(o);if(size() > highWaterMark)highWaterMark = size();}public Object pop(){Object poppedItem = pop();if(size() < lowWaterMark)lowWaterMark=size();return poppedItem;}public intmaximumSize(){return highWaterMark;}public intminimumSize(){return lowWaterMark;}public void resetMarks(){highWaterMark=lowWaterMark=size();}}}85~86์ชฝ ์˜ˆ์ œ์ธ๋ฐ, Stack์„ ๋˜๋‹ค์‹œ ๊ตฌํ˜„ ์ƒ์†ํ•˜๋Š” MonitorableStack์— ๋Œ€ํ•ด ์• ๊ธฐํ•˜๊ณ  ์žˆ์Œ..์•ž์— ๊ฒฝ์šฐ์ฒ˜๋Ÿผ pushMany์—์„œ ๋˜ ๊ฐœ๋งํ•˜๋Š” ์ผ์ด ๋ฐœ์ƒ๋จ..!์ด์™€ ๊ฐ™์€ ์ด์œ ๋Š” ๊ธฐ๋ณธ์ ์œผ๋กœ ๊ตฌํ˜„์ƒ์†์ด๋ž€ ๊ฐœ๋…์ด Base Class์— ๋ญ”๊ฐ€ ๊ตฌํ˜„์ด ๋˜์–ด ์žˆ๋Š”๋ฐ ๊ตฌํ˜„์ž์˜ ์˜๋„์™€๋Š” ๋‹ค๋ฅด๊ฒŒ ๋ฒ ์ด์Šค ํด๋ž˜์Šค์˜ ํ•จ์ˆ˜๊ฐ€ ๋™์ž‘ํ•  ์ˆ˜ ์žˆ๊ธฐ ๋•Œ๋ฌธ์ž„..์ •๋ฆฌํ•˜๋ฉด.. ๊ตฌํ˜„์ƒ์† ์“ฐ์ง€๋งˆ! ๊นœ๋นกํ–ˆ๋‹ค๊ฐ„์˜ค๋™์ž‘ํ•œ๋‹ค๊ตฌ!!
๊นจ์ง€๊ธฐ ์‰ฌ์šด ๊ธฐ๋ฐ˜ ํด๋ž˜์Šค ๋ฌธ์ œ(์˜ˆ์ œ)๊ตฌํ˜„ ์ƒ์†์€ ๋ฌธ์ œ๊ฐ€ ๋งŽ๋‹ค. ์™ ๋งŒํ•˜๋ฉด์ธํ„ฐํŽ˜์ด์Šค ์ƒ์†์„ ์‚ฌ์šฉํ•˜๋ผ!์ƒ์†๋œ ๊ธฐ๋Šฅ์ด ์—†๊ธฐ ๋•Œ๋ฌธ์— ์ž˜๋ชป๋  ์ผ๋„์—†๋‹ค์ธํ„ฐํŽ˜์ด์Šค ์ƒ์†์„ ์‚ฌ์šฉํ•˜๋ฉด ์•ˆ์ „ํ•˜๊ฒŒ ๋‹คํ˜•์„ฑ ํš๋“!๊ตฌํ˜„ ์ƒ์†์€ ํ•„์š”ํ•œ ๊ธฐ๋Šฅ์ด์ง€๋งŒ ์œ„ํ—˜ํ•˜๊ธฐ ๋•Œ๋ฌธ์— ์‚ฌ์šฉํ•˜๊ธฐ ์ „์— ์ถฉ๋ถ„ํžˆ ์‹ฌ์‚ฌ์ˆ™๊ณ  ํ•„!๋ฌผ๋ก  ์ธํ„ฐํŽ˜์ด์Šค ์ƒ์†์€ ์ผ์ผํžˆ ๋‹ค ๋งŒ๋“ค์–ด์ค˜์•ผ ํ•˜๊ธฐ ๋•Œ๋ฌธ์— ์ฝ”๋”ฉ์ด ๋А๋Š” ๋‹จ์ ์ด ์žˆ๊ธฐ๋Š” ํ•˜๋‹ค.ํ•˜์ง€๋งŒ ์˜ค๋™์ž‘ํ•˜๋Š” ๊ฒƒ๋ณด๋‹ค ๋‚ซ๋‹คโ€ฆ! (์ดํด๋ฆฝ์Šค๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ์‰ฝ๊ฒŒ ์œ„์ž„ ๋ฉ”์†Œ๋“œ๋ฅผ ๋งŒ๋“ค ์ˆ˜ ์žˆ๋‹ค๊ณ  ํ•จ)๊ทธ๋Ÿฌ๋‚˜ ์ด๋ ‡๊ฒŒ ๋งํ•˜๋Š” ์ž ์žˆ๋„๋‹คโ€ฆ๋‚œ ๊ธฐ๋ฐ˜ ํด๋ž˜์Šค ์ˆ˜์ •ํ•  ๋•Œ๋งˆ๋‹ค ํŒŒ์ƒ ํด๋ž˜์Šค๋Š” ๋‹ค ๊ฒ€ํ† ๋ฅผ ํ•˜๊ธฐ ๋•Œ๋ฌธ์— ๋ฌธ์ œ ์—†๋‹ค๊ตฌ!!!์ด๋ฏธ ๋‹น์‹ ์€ ๊ธฐ๋ฐ˜ ํด๋ž˜์Šค๋ฅผ ํ™•์žฅํ•˜๋Š” ๊ฒƒ์ด ์•„๋‹ˆ๋ผ ์ธํ„ฐํŽ˜์ด์Šค ๊ตฌํ˜„์„ ํ•˜๊ณ  ์žˆ์†Œ์ด๋‹คโ€ฆ ๊ฑ ์ธํ„ฐํŽ˜์ด์Šค ๊ตฌํ˜„์„ ํ•˜์‹œ์˜ค.
๊นจ์ง€๊ธฐ ์‰ฌ์šด ๊ธฐ๋ฐ˜ ํด๋ž˜์Šค ๋ฌธ์ œ(์˜ˆ์ œ)์•ž์—์„œ ์„ค๋ช…ํ•œ Stack, MonitorableStack์ •๋‹ต์€โ€ฆ์ฃ„์†กํ•ฉ๋‹ˆ๋‹คโ€ฆ ํƒ€์ดํ•‘์ด ๋„˜ ๋งŽ์•„์„œโ€ฆ. 88,89์ชฝ์„ ํŽด์ฃผ์„ธ์š”..Interface๋กœ Stack ๋งŒ๋“ญ๋‹ˆ๋‹ค.SimpleStack์€ implements๋ฅผ ํ†ตํ•ด ๊ตฌํ˜„ํ•จSimpleStack์€ ArrayList๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๊ธฐ๋Šฅ์„ ๊ตฌํ˜„ - ์œ„์ž„(ํ•ฉ์„ฑ)MonitorableStack์€์—ญ์‹œ implements๋ฅผ ํ†ตํ•ด ๊ตฌํ˜„MonitorableStack์€ SimpleList๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๊ธฐ๋Šฅ์„ ๊ตฌํ˜„ โ€“ ์œ„์ž„(ํ•ฉ์„ฑ)
๋‹ค์ค‘ ์ƒ์†๋‹ค์ค‘ ์ƒ์†์ด ์œ ์šฉํ•  ๋•Œ๋„ ์žˆ๋Š”๋ฐ ์—ญ์‹œ ๊ตฌํ˜„ ์ƒ์†๋ณด๋‹ค๋Š” ์บก์Аํ™”(ํ•ฉ์„ฑ)์„ ์ด์šฉํ•˜๋ผ~
ํ”„๋ ˆ์ž„์›ŒํฌMFC๋ฅผ ์ž˜๊ทผ์ž˜๊ทผ ์”น๊ณ  ์žˆ๋Š”๋ฐโ€ฆ.MFC๊ฐ€ ๋„๋ฆฌ ์‚ฌ์šฉ๋ฌ๊ธฐ ๋•Œ๋ฌธ์— ๋งˆ์†Œ์˜ ๋ฐฉ์‹์€ ์˜ฌ๋ฐ”๋ฅธ ๊ฑฐ์•ผ๋ผ๊ณ ๋งŽ์ด๋“ค ์ƒ๊ฐํ•˜๊ณ  ์žˆ์ŒMFC๋Š” ๊ธฐ๋ณธ์ ์œผ๋กœ ๊ตฌํ˜„ ์ƒ์† ๊ธฐ๋ฐ˜์ด๋‹ค.View, document๋ฅผ ์ƒ์†ํ•ด์„œ ์“ฐ๊ณ  ์žˆ์Œ..์—ญ์‹œ. ๊ฐœ๋ง์˜ ์ง€๋ฆ„๊ธธโ€ฆ๋˜ํ•œ ๋ญ”๊ฐ€ ๊ธฐ๋Šฅ์„ ๋ณ€๊ฒฝํ•˜๊ณ  ์‹ถ์œผ๋ฉด ์ƒ์† ๊ธฐ๋ฐ˜์€ ํด๋ž˜์Šค๋ฅผ ์ƒ์†ํ•ด์„œ ๋งŒ๋“ค์–ด์•ผ ๋˜๋Š”๋ฐ ์ด๋ ‡๊ฒŒ ๋˜๋ฉด ํด๋ž˜์Šค๊ฐ€ ์—„์ฒญ๋Š˜์–ด๋‚˜๊ฒŒ ๋˜๊ณ  ํด๋ž˜์Šค๊ฐ€ ๋Š˜์–ด๋‚˜๋ฉด ๋Š˜์ˆ˜๋ก ๊ฐœ๋ฐœ๊ธฐ๊ฐ„์€ ๊ธธ์–ด์ง„๋‹ค.
์ง€๊ธˆ๊นŒ์ง€ ๊ตฌํ˜„์ƒ์†์˜ ํํ˜œ๋ฅผ ๋ณด์…จ์Šต๋‹ˆ๋‹ค. ์ด์ œ ๋ณธ๊ฒฉ์ ์œผ๋กœ ํŒจํ„ด์„ ๋ณด์•„์š”.. ํ•˜์ง€๋งŒ์—ฌ๊ธฐ์„œ๋„ ๊ตฌํ˜„ ์ƒ์†์˜ ํํ˜œ๋ฅผ์„ค๋ช…ํ•˜๊ธฐ ์œ„ํ•ด ํŒจํ„ด์„ ์˜ˆ๋กœ ๋“ญ๋‹ˆ๋‹ค.Template Method ํŒจํ„ดFactory Method ํŒจํ„ด(์• ๊ฐ€ ๋ฌธ์ œ์ž„)
Template Method ํŒจํ„ดTemplate Method ํŒจํ„ด๊ธฐ๋ฐ˜ ํด๋ž˜์Šค ์ฝ”๋“œ๊ฐ€ ์˜ค๋ฒ„๋ผ์ด๋”ฉ ๊ฐ€๋Šฅํ•œ ๋ฉ”์†Œ๋“œ๋ฅผ ํ˜ธ์ถœํ•˜๊ณ  ๋ฉ”์†Œ๋“œ์˜ ๊ตฌํ˜„์€ ๊ธฐ๋ฐ˜ ํด๋ž˜์Šค๋ฅผ ๊ตฌํ˜„ ์ƒ์†ํ•œ ํด๋ž˜์Šค์— ์ œ๊ณตํ•˜๋Š”..์ €์ž๋„ ์ด๋””์—„๊ณผ ํŒจํ„ด์˜ ๊ฒฝ๊ณ„๊ฐ€ ๋ชจํ˜ธํ•œ ์ •๋„์˜ ํŒจํ„ด์ด๋ผ๊ณ  ํ•จ ํŒจํ„ด ์ฐธ ์‰ฝ์ฃ ์ž‰..~~?
Factory Method ํŒจํ„ดFactory Method ํŒจํ„ด์€ ๊ธฐ๋ฐ˜ ํด๋ž˜์Šค์— ์•Œ๋ ค์ง€์ง€ ์•Š์€ ๊ตฌ์ฒด ํด๋ž˜์Šค๋ฅผ ์ƒ์„ฑํ•˜๋Š” Template Method๋ผ ํ•  ์ˆ˜ ์žˆ๋‹ค.์‚ฌ์‹ค ์ฝ”๋“œ ๋ณด๊ณ  ์ดํ•ดํ•˜๋Š” ๋ฐ ์ •๋ง ์–ด๋ ค์› ์Œ;; Factory Method ํŒจํ„ด์€  ์•„์ฃผ ์œ ์—ฐํ•˜์ง€๋งŒ(๊ธฐ๋Šฅ ์ˆ˜์ • ์ถ”๊ฐ€๊ฐ€ ์‰ฝ๋‹ค)ํ•„์š” ์ด์ƒ์œผ๋กœ ๋ณต์žกํ•˜๋‹ค. ์ด ๋ณต์žกํ•จ์ด ์œ ์ง€ ๋ณด์ˆ˜์„ฑ๊ณผ ์‚ฌ์šฉ ํŽธ์˜์„ฑ์„ ํฌ๊ฒŒ ํ•ด์นจ..์ฑ…์— ์˜ˆ์ œ๋Š” ๋„ˆ๋ฌด ๋ณต์žกํ•˜์—ฌ ๋‹ค๋ฅธ ์˜ˆ์ œ๋ฅผ ์ค€๋น„์ธ์šฉ : http://underclub.tistory.com/125
Factory Method ํŒจํ„ดProduct๋Š” Factory Method ํŒจํ„ด์„ ์‚ฌ์šฉํ•˜์—ฌ ์ƒ์„ฑํ•  ๋ถ€๋ชจํด๋ž˜์ŠคIDCard๋Š” ์‹ค์ œ ์ƒ์„ฑ๋˜๋Š” ์ž์‹ ํด๋ž˜์ŠคFactory๋Š” Product๋ฅผ ์ƒ์„ฑ์„ ๋‹ด๋‹นํ•˜๋Š” ํด๋ž˜์ŠคIDCardFactory๋Š” ์‹ค์ œ ๊ธฐ๋Šฅ์„ ๊ฐ€์ง„ ์ž์‹ Product๋ฅผ ์ƒ์„ฑํ•˜๋Š” ํด๋ž˜์Šค
Factory Method ํŒจํ„ดUse ํ•จ์ˆ˜๊ฐ€ product๋งˆ๋‹ค์˜ ๊ณ ์œ  ๊ธฐ๋Šฅ์„ ๋‹ด๋‹นCreate๋Š” public์— final๋กœ ๊ฐ์ฒด์ƒ์„ฑ์€ ์ € ํ•จ์ˆ˜๋กœ ๋‹ด๋‹นCreateproduct์™€ registerproduct๋Š” ์ƒ์„ฑํ•ด์ค„ ๋•Œ๊ฐ์ฒด๋งˆ๋‹ค ๋‹ค๋ฅธ ๊ธฐ๋Šฅ์„ ๋ถ€์—ฌํ•ด์ค„ ์ˆ˜ ์žˆ์Œ(abstract)
Factory Method ํŒจํ„ดFactory Method ํŒจํ„ด์˜ ๋ฌธ์ œ์ ๋ญ”๊ฐ€ ํŒจํ„ด์„ ์‚ฌ์šฉํ•˜๊ธฐ ์œ„ํ•ด extends๋ฅผ  ์‚ฌ์šฉํ•˜๊ณ  ์žˆ๋‹ค๋Š” ๋ƒ„์ƒˆ๋‹ค.Product ๋ฅผ ์ƒ์†ํ•ด์„œ IDCard๋ฅผ ๋งŒ๋“ค๊ณ  ์žˆ๋Š”๋ฐ ์ด๋Š” Factory์—์„œ ์‚ฌ์šฉํ•˜๊ธฐ ์œ„ํ•ด ์ด๋Ÿฐ ๊ตฌ์กฐ๋กœ ๋งŒ๋“ค์—ˆ๋‹ค. Extends๊ฐ€ ํ•„์š”ํ•ด์„œ ํ•œ๊ฒƒ์ธ ์•„๋‹ˆ๋ผ!!!;;Factory Method ํŒจํ„ด์€ extends ๊ด€๊ณ„๋ฅผ ์ž˜๋ชป ์‚ฌ์šฉํ•˜๊ณ  ์žˆ๋‹ค.!! ๋Œ€์•ˆ์€ ์žˆ๋‹ค. Strategy ํŒจํ„ด์ด ๋ฉ‹์ง„ ๋Œ€์•ˆ์ด ๋  ์ˆ˜ ์žˆ๋‹ค.(์ „ ๋ชจ๋ฅธ๋‹ค๋Š” โ€ฆ ๋‹ด์— ์„ค๋ช… ์ข€ ์ž˜โ€ฆ๋ถ€ํƒ ใ…Ž)์‹ค์ œ ์‚ฌ์šฉIDCardFactory๋ฅผ ๋งŒ๋“ค๊ณ Create ํ•จ์ˆ˜๋กœ ์ƒ์„ฑUse ํ•จ์ˆ˜๋กœ ์‚ฌ์šฉ
๊นจ์ง€๊ธฐ ์‰ฌ์šด ๊ธฐ๋ฐ˜ ํด๋ž˜์Šค ๋ฌธ์ œ ์ •๋ฆฌ๊ผผ์ˆ˜๋ฅผ ์“ฐ์ง€๋ง๊ณ , ๊ตฌํ˜„ ์ƒ์† ๋Œ€์‹  ์บก์Аํ™”(ํ•ฉ์„ฑ)์™€ ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ์‚ฌ์šฉํ•˜๋ผ!์•ž์œผ๋กœ ์„ค๋ช…ํ•  ํŒจํ„ด ์ค‘ ์ƒ๋‹น์ˆ˜๊ฐ€ ๊ตฌํ˜„ ์ƒ์†์„ ์ธํ„ฐํŽ˜์ด์Šค ์ƒ์†์œผ๋กœ ๋ฐ”๊พธ๋Š” ๋ฐฉ๋ฒ•์— ๋Œ€ํ•œ ๋‚ด์šฉ์ถ”์ƒํ™”๋ฅผ ์ž˜ํ•˜๋ผ.. ์ถ”์ƒํ™”๋ฅผ ์ž˜ํ•˜๋ฉด ์œ ์—ฐํ•ด์ง(์ˆ˜์ •์ด ์‰ฌ์›Œ์ง), ํ•˜์ง€๋งŒ ๋ณต์žก์„ฑ์„ ์ฆ๊ฐ€ํ•จ.์œ ์—ฐ์„ฑ๊ณผ ๋ณต์žก์„ฑ ์‚ฌ์ด์—์„œ ์ ์ ˆํ•œ ํŠธ๋ ˆ์ด๋“œ ์˜คํ”„๋ฅผ ํ•˜๋ผ~์ง€๊ธˆ๊นŒ์ง€ ํ•œ ๋ง๋“ค์„ ์ •๋ฆฌํ•œ ์ฑ•ํ„ฐ์ž„..
์–ธ์ œ extends๋ฅผ ์‚ฌ์šฉํ•ด๋„ ์ข‹์€๊ฐ€?ํด๋ž˜์Šค ์ •๊ทœํ™”ํด๋ž˜์Šค์˜ ์ค‘๋ณต๋˜๋Š” ๊ธฐ๋Šฅ์„ ์ œ๊ฑฐํ•˜๋Š” ๊ฒฝ์šฐ๊ตฌํ˜„ ์ƒ์†์„ ์‚ฌ์šฉํ•˜์ง€ ์•Š๋Š”๋‹ค๋ฉด ํŒŒ์ƒ ํด๋ž˜์Šค์—์„œ ๋™์ผํ•œ ์ฝ”๋“œ๋ฅผ ๋ฐ˜๋ณตํ•ด์•ผ ํ•จ์—ฌ๊ธฐ์„œ๋Š” ๊ตฌํ˜„ํ•˜๊ณ ์ž ํ•˜๋Š” ํ”„๋กœ๊ทธ๋žจ์ด ๋Ÿฐํƒ€์ž„์— ๊ฐ์ฒด๋“ค์ด ์„œ๋กœ ์–ด๋–ป๊ฒŒ ๋ฉ”์‹œ์ง€๋ฅผ ์ฃผ๊ณ  ๋ฐ›๋Š” ์ง€์— ๋Œ€ํ•œ โ€˜๋™์ ๋ชจ๋ธโ€™์„ ๊ทœ๋ช…ํ•œ ํ›„!์— ๊ฐ ํด๋ž˜์Šค๊ฐ€ ์‚ฌ์šฉํ•˜๋Š” ๊ณตํ†ต์ ์ธ ๊ธฐ๋Šฅ์ด ํŒŒ์•…์ด ๋œ๋‹ค๋ฉด ๊ทธ ๋•Œ! extends๋ฅผ ์‚ฌ์šฉํ•˜๋ผ๊ณ  ํ•จ!์ˆ˜ํ–‰๋˜๋Š” ์—ฐ์‚ฐ์ด ๊ณต์œ ๋  ๋•ŒIs- a ๊ด€๊ณ„๊ฐ€ ํด๋ž˜์Šค ๊ณ„์ธต ๊ตฌ์กฐ๋ฅผ ๊ฒ€์ฆํ•˜๋Š” ๋ฐ ํšจ์œจ์ ์ด์ง€ ๋ชปํ•จManager is a Employee ๋ผ๊ณ  ํ• ๋•Œ ๊ณผ์—ฐ Manager Extends Employee ์ธ๊ฐ€โ€ฆ.Employee์™€ Manager๊ฐ€ ๊ฐ™์€ ์ผ์„ ํ•  ์ˆ˜๋„์ „ํ˜€ ๋‹ค๋ฅธ์ผ์„ ํ•  ์ˆ˜๋„Manager๊ฐ€ Employee๊ฐ€ ํ•˜๋Š” ์ผ๊นŒ์ง€ ์ด๊ด„ํ•ด์„œ ํ•  ์ˆ˜๋„๊ฒฐ๋ก  : ์ž์—ฐ์–ด์— ํœ˜๋‘˜๋ฆฌ์ง€ ๋ง๊ณ , ์ˆ˜ํ–‰๋˜๋Š” ์—ฐ์‚ฐ์˜ ๊ณต์œ ์— ์ดˆ์ ์„ ๋งž์ถ”์–ด๋ผ!์ปดํŒŒ์ผ ํƒ€์ž„ ํƒ€์ž… ๊ฒ€์‚ฌ์ปดํŒŒ์ผ ํƒ€์ž„์— ํƒ€์ž… ๊ฒ€์‚ฌ๋ฅผ ํ•ด์•ผํ•  ๊ฒฝ์šฐ๊ฐ€ ์žˆ๋‹ค.๋ฌผ๋ก  ํƒ€์ž…๊ฒ€์‚ฌ๋ฅผ ํ•˜์ง€์•Š๊ณ Implements๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ์ชฝ์œผ๋กœ ๊ตฌํ˜„ํ•  ์ˆ˜๋„ ์žˆ๋‹ค.๋ณต์žก๋„๋ฅผ ๋ถ„์„ํ•œ ํ›„ ๋‹จ์ˆœํ•œ ๊ฒƒ์„ ์‚ฌ์šฉํ•˜์ž
๊ฒฐ๋ก extends(๊ตฌํ˜„ ์ƒ์†)์™ ๋งŒํ•˜๋ฉด ์“ฐ์ง€๋งˆ..extends ์จ์•ผ ํ•œ๋‹ค๋ฉด ๊ธฐ๋Šฅ์— ๋งž๊ฒŒ ์ž˜ ์จ..Factory Method์ฒ˜๋Ÿผ ์“ธ๋ ค๋ฉด ์“ฐ์ง€๋งˆโ€ฆ
์บ„์‚ฌํ•ฉ๋‹ˆ๋‹คโ€ฆ.์งˆ๋ฌธ์€ ์‚ฌ์ ˆ~ C++ ์ด™์˜ค์—์š”..

More Related Content

PPT
[0820 ์„์žฌํ˜ธ]headfirst๋””์ž์ธํŒจํ„ด
PDF
7 8 1
ย 
PDF
HolubOnPatterns/chapter2_2
PPTX
Head first๋””์ž์ธํŒจํ„ด 1~13_ํฌ๋ฏผ_ํ˜ธ์ค€
PPTX
Design patterns
PDF
[Osxdev]4.swift
PDF
[1B1]์Šค์œ„ํ”„ํŠธํ”„๋กœ๊ทธ๋ž˜๋ฐ์–ธ์–ด
PPTX
[Dev rookie]designpattern
[0820 ์„์žฌํ˜ธ]headfirst๋””์ž์ธํŒจํ„ด
7 8 1
ย 
HolubOnPatterns/chapter2_2
Head first๋””์ž์ธํŒจํ„ด 1~13_ํฌ๋ฏผ_ํ˜ธ์ค€
Design patterns
[Osxdev]4.swift
[1B1]์Šค์œ„ํ”„ํŠธํ”„๋กœ๊ทธ๋ž˜๋ฐ์–ธ์–ด
[Dev rookie]designpattern

What's hot (18)

PDF
แ„‹แ…ตแ†ฐแ„€แ…ต แ„Œแ…ฉแ‡‚แ„‹แ…ณแ†ซ แ„แ…ฉแ„ƒแ…ณแ„€แ…ก แ„Œแ…ฉแ‡‚แ„‹แ…ณแ†ซแ„แ…ฉแ„ƒแ…ณแ„ƒแ…ก
PPTX
Chapter7~9 ppt
PDF
๊ฒŒ์ž„ ๊ฐœ๋ฐœ์— ์ž์ฃผ ์‚ฌ์šฉ๋˜๋Š” ๋””์ž์ธ ํŒจํ„ด
PPTX
์˜ˆ์™ธ์ฒ˜๋ฆฌ๊ฐ€์ด๋“œ
PDF
Effective c++ chapter7_8_9_dcshin
PPTX
Exception log practical_coding_guide, ์˜ˆ์™ธ์™€ ๋กœ๊ทธ ์ฝ”๋”ฉ ์‹ค์šฉ ๊ฐ€์ด๋“œ
PPTX
Effective c++chapter8
PPTX
Effective c++chapter4
PPT
Working Effectively With Legacy Code - xp2005
PPTX
Effective c++chapter1 and2
PPTX
Effective c++chapter3
PDF
์Šคํ”„๋ง๋ณด๋‹ค ์ค‘์š”ํ•œ ์Šคํ”„๋ง ์ด์•ผ๊ธฐ
PDF
Effective java
PPTX
[HaU] ์‹ ์ž… ๊ธฐ์ˆ  ๋ฉด์ ‘ ์ค€๋น„ java
PDF
Tcpl 12์žฅ ํŒŒ์ƒํด๋ž˜์Šค
PDF
Java rmi ๊ฐœ๋ฐœ ๊ฐ€์ด๋“œ
PPTX
Effective c++ chapter 7,8
PDF
More effective c++ chapter3 4
แ„‹แ…ตแ†ฐแ„€แ…ต แ„Œแ…ฉแ‡‚แ„‹แ…ณแ†ซ แ„แ…ฉแ„ƒแ…ณแ„€แ…ก แ„Œแ…ฉแ‡‚แ„‹แ…ณแ†ซแ„แ…ฉแ„ƒแ…ณแ„ƒแ…ก
Chapter7~9 ppt
๊ฒŒ์ž„ ๊ฐœ๋ฐœ์— ์ž์ฃผ ์‚ฌ์šฉ๋˜๋Š” ๋””์ž์ธ ํŒจํ„ด
์˜ˆ์™ธ์ฒ˜๋ฆฌ๊ฐ€์ด๋“œ
Effective c++ chapter7_8_9_dcshin
Exception log practical_coding_guide, ์˜ˆ์™ธ์™€ ๋กœ๊ทธ ์ฝ”๋”ฉ ์‹ค์šฉ ๊ฐ€์ด๋“œ
Effective c++chapter8
Effective c++chapter4
Working Effectively With Legacy Code - xp2005
Effective c++chapter1 and2
Effective c++chapter3
์Šคํ”„๋ง๋ณด๋‹ค ์ค‘์š”ํ•œ ์Šคํ”„๋ง ์ด์•ผ๊ธฐ
Effective java
[HaU] ์‹ ์ž… ๊ธฐ์ˆ  ๋ฉด์ ‘ ์ค€๋น„ java
Tcpl 12์žฅ ํŒŒ์ƒํด๋ž˜์Šค
Java rmi ๊ฐœ๋ฐœ ๊ฐ€์ด๋“œ
Effective c++ chapter 7,8
More effective c++ chapter3 4
Ad

Viewers also liked (6)

PDF
ํŒŒ์ด์ฌ ํ”Œ๋ผ์Šคํฌ๋กœ ๋ฐฐ์šฐ๋Š” ์›นํ”„๋กœ๊ทธ๋ž˜๋ฐ #1 (ABCD Foundation)
PDF
[SOPT] ๋ฐ์ดํ„ฐ ๊ตฌ์กฐ ๋ฐ ์•Œ๊ณ ๋ฆฌ์ฆ˜ ์Šคํ„ฐ๋”” - #01 : ๊ฐœ์š”, ์ ๊ทผ์  ๋ณต์žก๋„, ๋ฐฐ์—ด, ์—ฐ๊ฒฐ๋ฆฌ์ŠคํŠธ
PPTX
Python ์ดํ•ดํ•˜๊ธฐ 20160815
PDF
์„œ๋ฒ„ ๊ฐœ๋ฐœ์ž๊ฐ€ ๋˜๊ธฐ ์œ„ํ•œ ์ฒซ ๊ฑธ์Œ
PPTX
Python ํ‘œ์ค€ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ
PPTX
Python ์›น ํ”„๋กœ๊ทธ๋ž˜๋ฐ
ํŒŒ์ด์ฌ ํ”Œ๋ผ์Šคํฌ๋กœ ๋ฐฐ์šฐ๋Š” ์›นํ”„๋กœ๊ทธ๋ž˜๋ฐ #1 (ABCD Foundation)
[SOPT] ๋ฐ์ดํ„ฐ ๊ตฌ์กฐ ๋ฐ ์•Œ๊ณ ๋ฆฌ์ฆ˜ ์Šคํ„ฐ๋”” - #01 : ๊ฐœ์š”, ์ ๊ทผ์  ๋ณต์žก๋„, ๋ฐฐ์—ด, ์—ฐ๊ฒฐ๋ฆฌ์ŠคํŠธ
Python ์ดํ•ดํ•˜๊ธฐ 20160815
์„œ๋ฒ„ ๊ฐœ๋ฐœ์ž๊ฐ€ ๋˜๊ธฐ ์œ„ํ•œ ์ฒซ ๊ฑธ์Œ
Python ํ‘œ์ค€ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ
Python ์›น ํ”„๋กœ๊ทธ๋ž˜๋ฐ
Ad

Similar to HolubOnPatterns/chapter2_1 (20)

PDF
์‹ค์šฉ์ฃผ์˜ ๋””์ž์ธํŒจํ„ด 2 ์ธํ„ฐํŽ˜์ด์Šค๋กœ ํ”„๋กœ๊ทธ๋ž˜๋ฐํ•˜๊ธฐ
PDF
M5 6 1
ย 
PDF
Effective c++ chapter 1,2 ์š”์•ฝ
PDF
Java_06 ์ƒ์†
PDF
Java extends
PPTX
๋””์ž์ธํŒจํ„ด 1~13
PPTX
์ดํŽ™ํ‹ฐ๋ธŒ C++ 5,6 ์žฅ ์Šคํ„ฐ๋””
ย 
PPTX
๊ฐ์ฒด์ง€ํ–ฅ ํ”„๋กœ๊ทธ๋ž˜๋ฐ ๊ธฐ๋ณธ
PDF
Effective c++ chapter3, 4 ์š”์•ฝ๋ณธ
PDF
5 6 1
ย 
PDF
Effective C++ Chapter 2 Summary
PPTX
Effective c++ ์ฑ•ํ„ฐ 2 ์ •๋ฆฌ
PPTX
[์ž๋ฐ”์นดํŽ˜] ์ž๋ฐ” ๊ฐ์ฒด์ง€ํ–ฅ ํ”„๋กœ๊ทธ๋ž˜๋ฐ (2017)
PPTX
Effective Java ~
PPTX
Java, android ์Šคํ„ฐํ‹ฐ3
PPTX
Design patterns
PPTX
Effective c++ 1~8์žฅ
PPTX
๊ฐ์ฒด์ง€ํ–ฅํ”„๋กœ๊ทธ๋ž˜๋ฐ ํŠน๊ฐ•
PPT
Ai C#์„ธ๋ฏธ๋‚˜
PPTX
OOP - Object Oriendted Programing
์‹ค์šฉ์ฃผ์˜ ๋””์ž์ธํŒจํ„ด 2 ์ธํ„ฐํŽ˜์ด์Šค๋กœ ํ”„๋กœ๊ทธ๋ž˜๋ฐํ•˜๊ธฐ
M5 6 1
ย 
Effective c++ chapter 1,2 ์š”์•ฝ
Java_06 ์ƒ์†
Java extends
๋””์ž์ธํŒจํ„ด 1~13
์ดํŽ™ํ‹ฐ๋ธŒ C++ 5,6 ์žฅ ์Šคํ„ฐ๋””
ย 
๊ฐ์ฒด์ง€ํ–ฅ ํ”„๋กœ๊ทธ๋ž˜๋ฐ ๊ธฐ๋ณธ
Effective c++ chapter3, 4 ์š”์•ฝ๋ณธ
5 6 1
ย 
Effective C++ Chapter 2 Summary
Effective c++ ์ฑ•ํ„ฐ 2 ์ •๋ฆฌ
[์ž๋ฐ”์นดํŽ˜] ์ž๋ฐ” ๊ฐ์ฒด์ง€ํ–ฅ ํ”„๋กœ๊ทธ๋ž˜๋ฐ (2017)
Effective Java ~
Java, android ์Šคํ„ฐํ‹ฐ3
Design patterns
Effective c++ 1~8์žฅ
๊ฐ์ฒด์ง€ํ–ฅํ”„๋กœ๊ทธ๋ž˜๋ฐ ํŠน๊ฐ•
Ai C#์„ธ๋ฏธ๋‚˜
OOP - Object Oriendted Programing

HolubOnPatterns/chapter2_1

  • 1. ์ธํ„ฐํŽ˜์ด์Šค๋กœ ํ”„๋กœ๊ทธ๋ž˜๋ฐํ•˜๊ธฐ๊ทธ๋ฆฌ๊ณ  ๋ช‡ ๊ฐœ์˜ ์ƒ์„ฑํŒจํ„ด(1/2)์•„๊ฟˆ์‚ฌ10.06.19์ž„์ •ํ™˜
  • 2. ์™œ extends๊ฐ€ ๋‚˜์œ๊ฐ€?extend๋Š” OO์–ธ์–ด์—์„œ ์ค‘์š”ํ•œ ๊ธฐ๋Šฅ์„ ์ฐจ์ง€๋”ฐ๋ผ์„œ extend๋ฅผ ์“ด๋‹ค๋ฉด ๋ญ”๊ฐ€ OO์ ์ธ ๊ฒƒ์„ ํ•˜๊ณ  ์žˆ๊ตฌ๋‚˜~ ํ•˜๊ณ  ์ƒ๊ฐํ•˜๋ฉด์„œ ์—ฌ๊ธฐ์ €๊ธฐ ๋ง‰ ์“ฐ๋Š” ๊ฒŒ ๋ฌธ์ œ(๊ทธ๋Ÿฌ๋‚˜ ์ด extends๋Š” ๋ถ€์ž‘์šฉ์ด ์ฐธ ๋งŽ๋‹ค)๊ฐ์ฒด ์ง€ํ–ฅ์ด๋ž€! ๋™์ผํ•œ ํƒ€์ž…์— ๋‹ค์–‘ํ•œ ๊ตฌํ˜„์„ ์ œ๊ณตํ•˜๋Š” ๋‹คํ˜•์„ฑ(๊ธฐ๋ฐ˜ ํด๋ž˜์Šค์˜ ํ–‰๋™์„ ์ด๋ฅผ ์ƒ์†ํ•œ ํด๋ž˜์Šค์—์„œ ์žฌ์ •์˜ ํ•˜๋Š” ๊ฒƒ)์ด ๊ฐ์ฒด ์ง€ํ–ฅ ์‚ฌ๊ณ ์˜ ํ•ต์‹ฌ!์ด๋Ÿฐ ๋‹คํ˜•์„ฑ์€ extends ๋ณด๋‹ค๋Š” implements(์ธํ„ฐํŽ˜์ด์Šค)๋ฅผ ํ†ตํ•ด ๊ฐ€์žฅ ์ž˜ ์„ฑ์ทจํ•  ์ˆ˜ ์žˆ์Œ!(์•ž์œผ๋กœ ๊ณ„์† ์„ค๋ช…ํ•  ๊ฒƒ์ž„)
  • 3. ์ธํ„ฐํŽ˜์ด์Šค vsํด๋ž˜์Šค๊ตฌํ˜„ ์ƒ์†๋ณด๋‹จ ์ธํ„ฐํŽ˜์ด์Šค ์ƒ์†์ด ํ›จ์”ฌ ๋ฐ”๋žŒ์ง์œ ์—ฐ์„ฑ์˜ ์ƒ์‹ค๊ตฌํ˜„ ์ƒ์†์ด ๋‚˜์œ์ด์œ ๋Š”๋ฒ ์ด์Šค ํด๋ž˜์Šค์˜ ํ•จ์ˆ˜๊ฐ€ ์ด๋ฏธ ๊ตฌํ˜„๋˜์–ด ์žˆ๊ธฐ ๋•Œ๋ฌธ์— ์ด ๊ตฌํ˜„์— ์ข…์†์ ์ผ ์ˆ˜ ๋ฐ–์— ์—†๊ธฐ ๋•Œ๋ฌธ!๊ฒฐ๊ณผ์ ์œผ๋กœ ์ˆ˜์ •์ด ํž˜๋“ฌ!์• ์ž์ผ ๊ฐœ๋ฐœ ๋ฐฉ๋ฒ•๋ก ์˜ ํ•ต์‹ฌ์ค‘ ํ•˜๋‚˜๋Š” ๋””์ž์ธ๊ณผ ๊ฐœ๋ฐœ์„ ๋ณ‘ํ–‰! ์™„๋ฒฝํ•œ ์š”๊ตฌ ์‚ฌํ•ญ ๋„์ถœ ์ด์ „์— ํ”„๋กœ๊ทธ๋ž˜๋ฐ ์‹œ์ž‘.. ์ฆ‰ ์ž์ฃผ ๊ณ ์ณ์•ผ ๋œ๋‹ค๋Š” ์‚ฌ์‹ค! ์œ ์—ฐํ•œ ํ”„๋กœ๊ทธ๋žจ์ด ์•„๋‹ˆ๋ผ๋ฉด ๋ณ‘ํ–‰ ๊ฐœ๋ฐœ์€ ๋ถˆ๊ฐ€๋Šฅ!
  • 4. ์ธํ„ฐํŽ˜์ด์Šค vsํด๋ž˜์Šค(์˜ˆ์ œ1)void f(){LinkedList list = new LinkedList(); //... modify(list);}void modify(LinkedList list){list.add(...);doSomethingWith(list);}์˜ต๋น !.. LinkedList์ฆ์ด์—์š”.. HastSet์œผ๋กœ ๋ฐ”๊ฟ”์ฃผ์„ธ์š” ๋‹˜ํ•˜โ€ฆ
  • 5. ์ธํ„ฐํŽ˜์ด์Šค vsํด๋ž˜์Šค(์˜ˆ์ œ1)void f(){LinkedList list = new LinkedList(); //... modify(list);}void modify(LinkedList list){list.add(...);doSomethingWith(list);}๊ณ ์ณ์•ผ ํ•  ๊ณณ์ด ์ ์  ๋Š”๋‹ค.
  • 6. ์ธํ„ฐํŽ˜์ด์Šค vsํด๋ž˜์Šค(์˜ˆ์ œ1)void f(){ Collection list = new LinkedList(); //... modify(list);}void modify(Collection list){list.add(...);doSomethingWith(list);}
  • 7. ์ธํ„ฐํŽ˜์ด์Šค vsํด๋ž˜์Šค(์˜ˆ์ œ1)void f(){ Collection list = new Hashset(); //... modify(list);}void modify(Collection list){list.add(...);doSomethingWith(list);}ํ•œ ๊ณณ๋งŒ ๋ฐ”๊พธ๋ฉด ๋œ๋‹ค.
  • 8. ์ธํ„ฐํŽ˜์ด์Šค vsํด๋ž˜์Šค(์˜ˆ์ œ2)f(){ Collection c = new Hashset(); //... examine(c);}void examine(Collection c){ for(Iteratori = c.iterator(); i.hasNext();) //i.next() ํ†ตํ•ด ์›์†Œ๋ฅผ ์ˆœํšŒ}f(){ Collection c = new Hashset(); //... examine(c.iterator());}void examine(Iteratori){ for(; i.hasNext();) //i.next()๋ฅผ ํ†ตํ•ด ์›์†Œ๋ฅผ ์ˆœํšŒ}Iterator๋ฅผ ๋ฐ›๊ธฐ ๋•Œ๋ฌธ์— Collection์œผ๋กœ๋Š” ์ฒ˜๋ฆฌ๋ชปํ•˜๋Š”Map๋„ ์ฒ˜๋ฆฌ ๊ฐ€๋ŠฅIterator๋ฅผ ์˜ค๋ฒ„๋ผ์ด๋”ฉํ•˜์—ฌ ๋‹ค๋ฅด๊ฒŒ ์ˆœํšŒํ•˜๋Š” ๊ธฐ๋Šฅ ๊ฐ€๋Šฅ์ผ๋ฐ˜ํ™”๋œ ๋ฒ„์ „์€ ์ˆ˜์ •์—†์ด ์ด๋Ÿฌํ•œ ๋ชจ๋“  ๋ณ€ํ™”๊ฐ€ ์ˆ˜์šฉ๊ฐ€๋Šฅ!!์œ ์—ฐํ•˜๊ตฌ๋‚˜!!
  • 9. ๊ฒฐํ•ฉ๋„๊ฒฐํ•ฉ์ด ์—†๋Š” ํ”„๋กœ๊ทธ๋žจ์ด๋ž€ ์กด์žฌํ•˜์ง€ ์•Š์ง€๋งŒโ€ฆ..ํ”„๋กœ๊ทธ๋žจ์—์„œ ์ฝ”๋“œ๊ฐ„์˜ ๊ฒฐํ•ฉ๋„๊ฐ€ ๋‚ฎ์„์ˆ˜๋ก ์ข‹๋‹ค.์ „์—ญ ๋ณ€์ˆ˜๊ฐ€ ๋‚˜์œ์ด์œ !(๊ฐ•ํ•œ ๊ฒฐํ•ฉ)์ „์—ญ ๋ณ€์ˆ˜์˜ ํƒ€์ž…์„ ๋ฐ”๊พผ๋‹ค๊ณ  ์ƒ๊ฐํ–‡์„๋•Œ ์ด ๋ณ€์ˆ˜๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๋ชจ๋“  ์ฝ”๋“œ๋ฅผ ๊ฒ€์‚ฌ,์ˆ˜์ •,์ œํ…Œ์ŠคํŠธํ•ด์•ผํ•จ
  • 10. ๊ฒฐํ•ฉ๋„OO ๊ฐœ๋…์„ ์ถฉ์‹คํžˆ ์ง€ํ‚ค๋ฉด ๊ฒฐํ•ฉ๋„๋ฅผ ์ค„์ผ ์ˆ˜ ์žˆ๋‹ค..์ƒ์ˆ˜๋ฅผ ์ œ์™ธํ•œ ๋ชจ๋“  ํ•„๋“œ๋Š” private๋กœ!get, set์€ ์ค„์—ฌ๋ผ..(public์ด๋‚˜ ์ง„๋ฐฐ์—†์Œ)๋‚˜์ค‘์— ์œ ์ง€๋ณด์ˆ˜์‹œ ํŽธ๋ฆฌํ•จ
  • 11. ๊นจ์ง€๊ธฐ ์‰ฌ์šด ๊ธฐ๋ฐ˜ ํด๋ž˜์Šค ๋ฌธ์ œ๊ตฌํ˜„ ์ƒ์†์€ ์ž์‹๊ณผ ๋ถ€๋ชจ ํด๋ž˜์Šค๊ฐ„ ๊ฐ•ํ•œ ๊ฒฐํ•ฉ์„ ์˜๋ฏธ๋ถ€๋ชจ๋ฅผ ์กฐ๊ธˆ ์ˆ˜์ •ํ–ˆ์Œ์—๋„ ์ž์‹์ด ๋ง๊ฐ€์งˆ ์ˆ˜ ์žˆ์Œ
  • 12. ๊นจ์ง€๊ธฐ ์‰ฌ์šด ๊ธฐ๋ฐ˜ ํด๋ž˜์Šค ๋ฌธ์ œ(์˜ˆ์ œ) class Stack extends ArrayList{ private inttopOfStack = 0; public void push(Object article) { add(topOfStack++, article); } public Object pop() { return remove(--topOfStack); } public void pushMany(Object[] articles) { for(inti =0; i < articles.length; ++i) push(articles[i]); }}//์Šคํƒ์˜ํ˜„์žฌ ์œ„์น˜๋ฅผ ์ €์žฅํ•˜๋Š” topOfStack๋ฅผ ์ •์˜ํ•จStack aStack = new Stack();aStack.push("1");aStack.push("2");aStack.clear(); //clear๋Š” ArrayList Method๋Œ€๋žต ๋‚ญํŒจ.. topOfStack์€ 0์ด ์•ˆ๋จ๊ฐœ๋ง..!์ƒ์†์„ ํ•˜๊ฒŒ ๋˜๋ฉด ์›ํ•˜์ง€ ์•Š๋˜ ๋ฉ”์†Œ๋“œclear() ๊นŒ์ง€ ๋ชจ๋‘ ์ƒ์†ํ•˜๊ฒŒ ๋จ
  • 13. ๊นจ์ง€๊ธฐ ์‰ฌ์šด ๊ธฐ๋ฐ˜ ํด๋ž˜์Šค ๋ฌธ์ œ(์˜ˆ์ œ)ArrayList๋ฅผ ์ƒ์†ํ•œ ๊ฒƒ ์ž์ฒด๊ฐ€ ๊ฐœ๋…์ ์œผ๋กœ ๋ง์ด์•ˆ๋จStack is ArrayList๊ฐ€ ์•„๋‹ˆ๋‹ค..์–ด๋–ป๊ฒŒ ๊ณ ์น ๊นŒ?Clear()์—์„œ ์˜ˆ์™ธ๋ฅผ ๋˜์ €๋ฒ„๋ฆฌ์ž!์ด๊ฑด ์ปดํŒŒ์ผ ์—๋Ÿฌ๋ฅผ ๋Ÿฐํƒ€์ž„ ์—๋Ÿฌ๋กœ ์˜ฎ๊ฒจ ๋ฒ„๋ฆฌ๋Š” ๋งํ•  ๋†ˆ์˜ ์ƒ๊ฐtopOfStack๋Œ€์‹  size()๋ฉ”์†Œ๋“œ ์ด์šฉ์ด๊ฑด clear()๋งŒ ์–ด๋–ป๊ฒŒ ๊ณ ์ณ๋ณด๊ฒ ๋‹ค๋Š”์ƒ๊ฐ๋‹ค๋ฅธ ํ•จ์ˆ˜์—์„œ ๊ฐœ๋งโ€ฆ. (ex. removeRange..)์ง€๊ธˆ ์ƒํ™ฉ์—์„œ ์ƒ์†์€ ์–ดํ๊ฐ€ ์žˆ๋‹ค..์ƒ์†๋Œ€์‹  ํ•ฉ์„ฑ์„ ์ด์šฉํ•˜์ž!!!
  • 14. ๊นจ์ง€๊ธฐ ์‰ฌ์šด ๊ธฐ๋ฐ˜ ํด๋ž˜์Šค ๋ฌธ์ œ(์˜ˆ์ œ)class Stack{private inttopOfStack = 0;private ArrayListtheData = new ArrayList();public void push(Object article){theData.add(topOfStack++, article);}public Object pop(){ return theData.remove(--topOfStack);}public void pushMany(Object[] articles){for(inti =0; i < articles.length;++i) push(articles[i]);}public int size(){ return theData.size();}}์ƒ์†ํ•˜์ง€ ์•Š๊ณ  ArrayList๋ฅผ ์ด์šฉํ•˜์—ฌ ๊ตฌํ˜„ํ•˜์˜€๋‹ค.์ด์ œ ArrayList๊ฐ€ ์ˆ˜์ •๋˜๋Š” ์ผ์ด ์ƒ๊ฒจ๋„ ๊ฐœ๋งํ•˜๋Š” ์ผ์€ ์—†์–ด์ง!๋ณ€๊ฒฝ์— ๊ฐ•ํ•ด์ง~
  • 15. ๊นจ์ง€๊ธฐ ์‰ฌ์šด ๊ธฐ๋ฐ˜ ํด๋ž˜์Šค ๋ฌธ์ œ(์˜ˆ์ œ)class MonitorableStack extends Stack{private inthighWaterMark = 0;private intlowWaterMark = 0;public void push(Object o){push(o);if(size() > highWaterMark)highWaterMark = size();}public Object pop(){Object poppedItem = pop();if(size() < lowWaterMark)lowWaterMark=size();return poppedItem;}public intmaximumSize(){return highWaterMark;}public intminimumSize(){return lowWaterMark;}public void resetMarks(){highWaterMark=lowWaterMark=size();}}}85~86์ชฝ ์˜ˆ์ œ์ธ๋ฐ, Stack์„ ๋˜๋‹ค์‹œ ๊ตฌํ˜„ ์ƒ์†ํ•˜๋Š” MonitorableStack์— ๋Œ€ํ•ด ์• ๊ธฐํ•˜๊ณ  ์žˆ์Œ..์•ž์— ๊ฒฝ์šฐ์ฒ˜๋Ÿผ pushMany์—์„œ ๋˜ ๊ฐœ๋งํ•˜๋Š” ์ผ์ด ๋ฐœ์ƒ๋จ..!์ด์™€ ๊ฐ™์€ ์ด์œ ๋Š” ๊ธฐ๋ณธ์ ์œผ๋กœ ๊ตฌํ˜„์ƒ์†์ด๋ž€ ๊ฐœ๋…์ด Base Class์— ๋ญ”๊ฐ€ ๊ตฌํ˜„์ด ๋˜์–ด ์žˆ๋Š”๋ฐ ๊ตฌํ˜„์ž์˜ ์˜๋„์™€๋Š” ๋‹ค๋ฅด๊ฒŒ ๋ฒ ์ด์Šค ํด๋ž˜์Šค์˜ ํ•จ์ˆ˜๊ฐ€ ๋™์ž‘ํ•  ์ˆ˜ ์žˆ๊ธฐ ๋•Œ๋ฌธ์ž„..์ •๋ฆฌํ•˜๋ฉด.. ๊ตฌํ˜„์ƒ์† ์“ฐ์ง€๋งˆ! ๊นœ๋นกํ–ˆ๋‹ค๊ฐ„์˜ค๋™์ž‘ํ•œ๋‹ค๊ตฌ!!
  • 16. ๊นจ์ง€๊ธฐ ์‰ฌ์šด ๊ธฐ๋ฐ˜ ํด๋ž˜์Šค ๋ฌธ์ œ(์˜ˆ์ œ)๊ตฌํ˜„ ์ƒ์†์€ ๋ฌธ์ œ๊ฐ€ ๋งŽ๋‹ค. ์™ ๋งŒํ•˜๋ฉด์ธํ„ฐํŽ˜์ด์Šค ์ƒ์†์„ ์‚ฌ์šฉํ•˜๋ผ!์ƒ์†๋œ ๊ธฐ๋Šฅ์ด ์—†๊ธฐ ๋•Œ๋ฌธ์— ์ž˜๋ชป๋  ์ผ๋„์—†๋‹ค์ธํ„ฐํŽ˜์ด์Šค ์ƒ์†์„ ์‚ฌ์šฉํ•˜๋ฉด ์•ˆ์ „ํ•˜๊ฒŒ ๋‹คํ˜•์„ฑ ํš๋“!๊ตฌํ˜„ ์ƒ์†์€ ํ•„์š”ํ•œ ๊ธฐ๋Šฅ์ด์ง€๋งŒ ์œ„ํ—˜ํ•˜๊ธฐ ๋•Œ๋ฌธ์— ์‚ฌ์šฉํ•˜๊ธฐ ์ „์— ์ถฉ๋ถ„ํžˆ ์‹ฌ์‚ฌ์ˆ™๊ณ  ํ•„!๋ฌผ๋ก  ์ธํ„ฐํŽ˜์ด์Šค ์ƒ์†์€ ์ผ์ผํžˆ ๋‹ค ๋งŒ๋“ค์–ด์ค˜์•ผ ํ•˜๊ธฐ ๋•Œ๋ฌธ์— ์ฝ”๋”ฉ์ด ๋А๋Š” ๋‹จ์ ์ด ์žˆ๊ธฐ๋Š” ํ•˜๋‹ค.ํ•˜์ง€๋งŒ ์˜ค๋™์ž‘ํ•˜๋Š” ๊ฒƒ๋ณด๋‹ค ๋‚ซ๋‹คโ€ฆ! (์ดํด๋ฆฝ์Šค๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ์‰ฝ๊ฒŒ ์œ„์ž„ ๋ฉ”์†Œ๋“œ๋ฅผ ๋งŒ๋“ค ์ˆ˜ ์žˆ๋‹ค๊ณ  ํ•จ)๊ทธ๋Ÿฌ๋‚˜ ์ด๋ ‡๊ฒŒ ๋งํ•˜๋Š” ์ž ์žˆ๋„๋‹คโ€ฆ๋‚œ ๊ธฐ๋ฐ˜ ํด๋ž˜์Šค ์ˆ˜์ •ํ•  ๋•Œ๋งˆ๋‹ค ํŒŒ์ƒ ํด๋ž˜์Šค๋Š” ๋‹ค ๊ฒ€ํ† ๋ฅผ ํ•˜๊ธฐ ๋•Œ๋ฌธ์— ๋ฌธ์ œ ์—†๋‹ค๊ตฌ!!!์ด๋ฏธ ๋‹น์‹ ์€ ๊ธฐ๋ฐ˜ ํด๋ž˜์Šค๋ฅผ ํ™•์žฅํ•˜๋Š” ๊ฒƒ์ด ์•„๋‹ˆ๋ผ ์ธํ„ฐํŽ˜์ด์Šค ๊ตฌํ˜„์„ ํ•˜๊ณ  ์žˆ์†Œ์ด๋‹คโ€ฆ ๊ฑ ์ธํ„ฐํŽ˜์ด์Šค ๊ตฌํ˜„์„ ํ•˜์‹œ์˜ค.
  • 17. ๊นจ์ง€๊ธฐ ์‰ฌ์šด ๊ธฐ๋ฐ˜ ํด๋ž˜์Šค ๋ฌธ์ œ(์˜ˆ์ œ)์•ž์—์„œ ์„ค๋ช…ํ•œ Stack, MonitorableStack์ •๋‹ต์€โ€ฆ์ฃ„์†กํ•ฉ๋‹ˆ๋‹คโ€ฆ ํƒ€์ดํ•‘์ด ๋„˜ ๋งŽ์•„์„œโ€ฆ. 88,89์ชฝ์„ ํŽด์ฃผ์„ธ์š”..Interface๋กœ Stack ๋งŒ๋“ญ๋‹ˆ๋‹ค.SimpleStack์€ implements๋ฅผ ํ†ตํ•ด ๊ตฌํ˜„ํ•จSimpleStack์€ ArrayList๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๊ธฐ๋Šฅ์„ ๊ตฌํ˜„ - ์œ„์ž„(ํ•ฉ์„ฑ)MonitorableStack์€์—ญ์‹œ implements๋ฅผ ํ†ตํ•ด ๊ตฌํ˜„MonitorableStack์€ SimpleList๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๊ธฐ๋Šฅ์„ ๊ตฌํ˜„ โ€“ ์œ„์ž„(ํ•ฉ์„ฑ)
  • 18. ๋‹ค์ค‘ ์ƒ์†๋‹ค์ค‘ ์ƒ์†์ด ์œ ์šฉํ•  ๋•Œ๋„ ์žˆ๋Š”๋ฐ ์—ญ์‹œ ๊ตฌํ˜„ ์ƒ์†๋ณด๋‹ค๋Š” ์บก์Аํ™”(ํ•ฉ์„ฑ)์„ ์ด์šฉํ•˜๋ผ~
  • 19. ํ”„๋ ˆ์ž„์›ŒํฌMFC๋ฅผ ์ž˜๊ทผ์ž˜๊ทผ ์”น๊ณ  ์žˆ๋Š”๋ฐโ€ฆ.MFC๊ฐ€ ๋„๋ฆฌ ์‚ฌ์šฉ๋ฌ๊ธฐ ๋•Œ๋ฌธ์— ๋งˆ์†Œ์˜ ๋ฐฉ์‹์€ ์˜ฌ๋ฐ”๋ฅธ ๊ฑฐ์•ผ๋ผ๊ณ ๋งŽ์ด๋“ค ์ƒ๊ฐํ•˜๊ณ  ์žˆ์ŒMFC๋Š” ๊ธฐ๋ณธ์ ์œผ๋กœ ๊ตฌํ˜„ ์ƒ์† ๊ธฐ๋ฐ˜์ด๋‹ค.View, document๋ฅผ ์ƒ์†ํ•ด์„œ ์“ฐ๊ณ  ์žˆ์Œ..์—ญ์‹œ. ๊ฐœ๋ง์˜ ์ง€๋ฆ„๊ธธโ€ฆ๋˜ํ•œ ๋ญ”๊ฐ€ ๊ธฐ๋Šฅ์„ ๋ณ€๊ฒฝํ•˜๊ณ  ์‹ถ์œผ๋ฉด ์ƒ์† ๊ธฐ๋ฐ˜์€ ํด๋ž˜์Šค๋ฅผ ์ƒ์†ํ•ด์„œ ๋งŒ๋“ค์–ด์•ผ ๋˜๋Š”๋ฐ ์ด๋ ‡๊ฒŒ ๋˜๋ฉด ํด๋ž˜์Šค๊ฐ€ ์—„์ฒญ๋Š˜์–ด๋‚˜๊ฒŒ ๋˜๊ณ  ํด๋ž˜์Šค๊ฐ€ ๋Š˜์–ด๋‚˜๋ฉด ๋Š˜์ˆ˜๋ก ๊ฐœ๋ฐœ๊ธฐ๊ฐ„์€ ๊ธธ์–ด์ง„๋‹ค.
  • 20. ์ง€๊ธˆ๊นŒ์ง€ ๊ตฌํ˜„์ƒ์†์˜ ํํ˜œ๋ฅผ ๋ณด์…จ์Šต๋‹ˆ๋‹ค. ์ด์ œ ๋ณธ๊ฒฉ์ ์œผ๋กœ ํŒจํ„ด์„ ๋ณด์•„์š”.. ํ•˜์ง€๋งŒ์—ฌ๊ธฐ์„œ๋„ ๊ตฌํ˜„ ์ƒ์†์˜ ํํ˜œ๋ฅผ์„ค๋ช…ํ•˜๊ธฐ ์œ„ํ•ด ํŒจํ„ด์„ ์˜ˆ๋กœ ๋“ญ๋‹ˆ๋‹ค.Template Method ํŒจํ„ดFactory Method ํŒจํ„ด(์• ๊ฐ€ ๋ฌธ์ œ์ž„)
  • 21. Template Method ํŒจํ„ดTemplate Method ํŒจํ„ด๊ธฐ๋ฐ˜ ํด๋ž˜์Šค ์ฝ”๋“œ๊ฐ€ ์˜ค๋ฒ„๋ผ์ด๋”ฉ ๊ฐ€๋Šฅํ•œ ๋ฉ”์†Œ๋“œ๋ฅผ ํ˜ธ์ถœํ•˜๊ณ  ๋ฉ”์†Œ๋“œ์˜ ๊ตฌํ˜„์€ ๊ธฐ๋ฐ˜ ํด๋ž˜์Šค๋ฅผ ๊ตฌํ˜„ ์ƒ์†ํ•œ ํด๋ž˜์Šค์— ์ œ๊ณตํ•˜๋Š”..์ €์ž๋„ ์ด๋””์—„๊ณผ ํŒจํ„ด์˜ ๊ฒฝ๊ณ„๊ฐ€ ๋ชจํ˜ธํ•œ ์ •๋„์˜ ํŒจํ„ด์ด๋ผ๊ณ  ํ•จ ํŒจํ„ด ์ฐธ ์‰ฝ์ฃ ์ž‰..~~?
  • 22. Factory Method ํŒจํ„ดFactory Method ํŒจํ„ด์€ ๊ธฐ๋ฐ˜ ํด๋ž˜์Šค์— ์•Œ๋ ค์ง€์ง€ ์•Š์€ ๊ตฌ์ฒด ํด๋ž˜์Šค๋ฅผ ์ƒ์„ฑํ•˜๋Š” Template Method๋ผ ํ•  ์ˆ˜ ์žˆ๋‹ค.์‚ฌ์‹ค ์ฝ”๋“œ ๋ณด๊ณ  ์ดํ•ดํ•˜๋Š” ๋ฐ ์ •๋ง ์–ด๋ ค์› ์Œ;; Factory Method ํŒจํ„ด์€ ์•„์ฃผ ์œ ์—ฐํ•˜์ง€๋งŒ(๊ธฐ๋Šฅ ์ˆ˜์ • ์ถ”๊ฐ€๊ฐ€ ์‰ฝ๋‹ค)ํ•„์š” ์ด์ƒ์œผ๋กœ ๋ณต์žกํ•˜๋‹ค. ์ด ๋ณต์žกํ•จ์ด ์œ ์ง€ ๋ณด์ˆ˜์„ฑ๊ณผ ์‚ฌ์šฉ ํŽธ์˜์„ฑ์„ ํฌ๊ฒŒ ํ•ด์นจ..์ฑ…์— ์˜ˆ์ œ๋Š” ๋„ˆ๋ฌด ๋ณต์žกํ•˜์—ฌ ๋‹ค๋ฅธ ์˜ˆ์ œ๋ฅผ ์ค€๋น„์ธ์šฉ : http://underclub.tistory.com/125
  • 23. Factory Method ํŒจํ„ดProduct๋Š” Factory Method ํŒจํ„ด์„ ์‚ฌ์šฉํ•˜์—ฌ ์ƒ์„ฑํ•  ๋ถ€๋ชจํด๋ž˜์ŠคIDCard๋Š” ์‹ค์ œ ์ƒ์„ฑ๋˜๋Š” ์ž์‹ ํด๋ž˜์ŠคFactory๋Š” Product๋ฅผ ์ƒ์„ฑ์„ ๋‹ด๋‹นํ•˜๋Š” ํด๋ž˜์ŠคIDCardFactory๋Š” ์‹ค์ œ ๊ธฐ๋Šฅ์„ ๊ฐ€์ง„ ์ž์‹ Product๋ฅผ ์ƒ์„ฑํ•˜๋Š” ํด๋ž˜์Šค
  • 24. Factory Method ํŒจํ„ดUse ํ•จ์ˆ˜๊ฐ€ product๋งˆ๋‹ค์˜ ๊ณ ์œ  ๊ธฐ๋Šฅ์„ ๋‹ด๋‹นCreate๋Š” public์— final๋กœ ๊ฐ์ฒด์ƒ์„ฑ์€ ์ € ํ•จ์ˆ˜๋กœ ๋‹ด๋‹นCreateproduct์™€ registerproduct๋Š” ์ƒ์„ฑํ•ด์ค„ ๋•Œ๊ฐ์ฒด๋งˆ๋‹ค ๋‹ค๋ฅธ ๊ธฐ๋Šฅ์„ ๋ถ€์—ฌํ•ด์ค„ ์ˆ˜ ์žˆ์Œ(abstract)
  • 25. Factory Method ํŒจํ„ดFactory Method ํŒจํ„ด์˜ ๋ฌธ์ œ์ ๋ญ”๊ฐ€ ํŒจํ„ด์„ ์‚ฌ์šฉํ•˜๊ธฐ ์œ„ํ•ด extends๋ฅผ ์‚ฌ์šฉํ•˜๊ณ  ์žˆ๋‹ค๋Š” ๋ƒ„์ƒˆ๋‹ค.Product ๋ฅผ ์ƒ์†ํ•ด์„œ IDCard๋ฅผ ๋งŒ๋“ค๊ณ  ์žˆ๋Š”๋ฐ ์ด๋Š” Factory์—์„œ ์‚ฌ์šฉํ•˜๊ธฐ ์œ„ํ•ด ์ด๋Ÿฐ ๊ตฌ์กฐ๋กœ ๋งŒ๋“ค์—ˆ๋‹ค. Extends๊ฐ€ ํ•„์š”ํ•ด์„œ ํ•œ๊ฒƒ์ธ ์•„๋‹ˆ๋ผ!!!;;Factory Method ํŒจํ„ด์€ extends ๊ด€๊ณ„๋ฅผ ์ž˜๋ชป ์‚ฌ์šฉํ•˜๊ณ  ์žˆ๋‹ค.!! ๋Œ€์•ˆ์€ ์žˆ๋‹ค. Strategy ํŒจํ„ด์ด ๋ฉ‹์ง„ ๋Œ€์•ˆ์ด ๋  ์ˆ˜ ์žˆ๋‹ค.(์ „ ๋ชจ๋ฅธ๋‹ค๋Š” โ€ฆ ๋‹ด์— ์„ค๋ช… ์ข€ ์ž˜โ€ฆ๋ถ€ํƒ ใ…Ž)์‹ค์ œ ์‚ฌ์šฉIDCardFactory๋ฅผ ๋งŒ๋“ค๊ณ Create ํ•จ์ˆ˜๋กœ ์ƒ์„ฑUse ํ•จ์ˆ˜๋กœ ์‚ฌ์šฉ
  • 26. ๊นจ์ง€๊ธฐ ์‰ฌ์šด ๊ธฐ๋ฐ˜ ํด๋ž˜์Šค ๋ฌธ์ œ ์ •๋ฆฌ๊ผผ์ˆ˜๋ฅผ ์“ฐ์ง€๋ง๊ณ , ๊ตฌํ˜„ ์ƒ์† ๋Œ€์‹  ์บก์Аํ™”(ํ•ฉ์„ฑ)์™€ ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ์‚ฌ์šฉํ•˜๋ผ!์•ž์œผ๋กœ ์„ค๋ช…ํ•  ํŒจํ„ด ์ค‘ ์ƒ๋‹น์ˆ˜๊ฐ€ ๊ตฌํ˜„ ์ƒ์†์„ ์ธํ„ฐํŽ˜์ด์Šค ์ƒ์†์œผ๋กœ ๋ฐ”๊พธ๋Š” ๋ฐฉ๋ฒ•์— ๋Œ€ํ•œ ๋‚ด์šฉ์ถ”์ƒํ™”๋ฅผ ์ž˜ํ•˜๋ผ.. ์ถ”์ƒํ™”๋ฅผ ์ž˜ํ•˜๋ฉด ์œ ์—ฐํ•ด์ง(์ˆ˜์ •์ด ์‰ฌ์›Œ์ง), ํ•˜์ง€๋งŒ ๋ณต์žก์„ฑ์„ ์ฆ๊ฐ€ํ•จ.์œ ์—ฐ์„ฑ๊ณผ ๋ณต์žก์„ฑ ์‚ฌ์ด์—์„œ ์ ์ ˆํ•œ ํŠธ๋ ˆ์ด๋“œ ์˜คํ”„๋ฅผ ํ•˜๋ผ~์ง€๊ธˆ๊นŒ์ง€ ํ•œ ๋ง๋“ค์„ ์ •๋ฆฌํ•œ ์ฑ•ํ„ฐ์ž„..
  • 27. ์–ธ์ œ extends๋ฅผ ์‚ฌ์šฉํ•ด๋„ ์ข‹์€๊ฐ€?ํด๋ž˜์Šค ์ •๊ทœํ™”ํด๋ž˜์Šค์˜ ์ค‘๋ณต๋˜๋Š” ๊ธฐ๋Šฅ์„ ์ œ๊ฑฐํ•˜๋Š” ๊ฒฝ์šฐ๊ตฌํ˜„ ์ƒ์†์„ ์‚ฌ์šฉํ•˜์ง€ ์•Š๋Š”๋‹ค๋ฉด ํŒŒ์ƒ ํด๋ž˜์Šค์—์„œ ๋™์ผํ•œ ์ฝ”๋“œ๋ฅผ ๋ฐ˜๋ณตํ•ด์•ผ ํ•จ์—ฌ๊ธฐ์„œ๋Š” ๊ตฌํ˜„ํ•˜๊ณ ์ž ํ•˜๋Š” ํ”„๋กœ๊ทธ๋žจ์ด ๋Ÿฐํƒ€์ž„์— ๊ฐ์ฒด๋“ค์ด ์„œ๋กœ ์–ด๋–ป๊ฒŒ ๋ฉ”์‹œ์ง€๋ฅผ ์ฃผ๊ณ  ๋ฐ›๋Š” ์ง€์— ๋Œ€ํ•œ โ€˜๋™์ ๋ชจ๋ธโ€™์„ ๊ทœ๋ช…ํ•œ ํ›„!์— ๊ฐ ํด๋ž˜์Šค๊ฐ€ ์‚ฌ์šฉํ•˜๋Š” ๊ณตํ†ต์ ์ธ ๊ธฐ๋Šฅ์ด ํŒŒ์•…์ด ๋œ๋‹ค๋ฉด ๊ทธ ๋•Œ! extends๋ฅผ ์‚ฌ์šฉํ•˜๋ผ๊ณ  ํ•จ!์ˆ˜ํ–‰๋˜๋Š” ์—ฐ์‚ฐ์ด ๊ณต์œ ๋  ๋•ŒIs- a ๊ด€๊ณ„๊ฐ€ ํด๋ž˜์Šค ๊ณ„์ธต ๊ตฌ์กฐ๋ฅผ ๊ฒ€์ฆํ•˜๋Š” ๋ฐ ํšจ์œจ์ ์ด์ง€ ๋ชปํ•จManager is a Employee ๋ผ๊ณ  ํ• ๋•Œ ๊ณผ์—ฐ Manager Extends Employee ์ธ๊ฐ€โ€ฆ.Employee์™€ Manager๊ฐ€ ๊ฐ™์€ ์ผ์„ ํ•  ์ˆ˜๋„์ „ํ˜€ ๋‹ค๋ฅธ์ผ์„ ํ•  ์ˆ˜๋„Manager๊ฐ€ Employee๊ฐ€ ํ•˜๋Š” ์ผ๊นŒ์ง€ ์ด๊ด„ํ•ด์„œ ํ•  ์ˆ˜๋„๊ฒฐ๋ก  : ์ž์—ฐ์–ด์— ํœ˜๋‘˜๋ฆฌ์ง€ ๋ง๊ณ , ์ˆ˜ํ–‰๋˜๋Š” ์—ฐ์‚ฐ์˜ ๊ณต์œ ์— ์ดˆ์ ์„ ๋งž์ถ”์–ด๋ผ!์ปดํŒŒ์ผ ํƒ€์ž„ ํƒ€์ž… ๊ฒ€์‚ฌ์ปดํŒŒ์ผ ํƒ€์ž„์— ํƒ€์ž… ๊ฒ€์‚ฌ๋ฅผ ํ•ด์•ผํ•  ๊ฒฝ์šฐ๊ฐ€ ์žˆ๋‹ค.๋ฌผ๋ก  ํƒ€์ž…๊ฒ€์‚ฌ๋ฅผ ํ•˜์ง€์•Š๊ณ Implements๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ์ชฝ์œผ๋กœ ๊ตฌํ˜„ํ•  ์ˆ˜๋„ ์žˆ๋‹ค.๋ณต์žก๋„๋ฅผ ๋ถ„์„ํ•œ ํ›„ ๋‹จ์ˆœํ•œ ๊ฒƒ์„ ์‚ฌ์šฉํ•˜์ž
  • 28. ๊ฒฐ๋ก extends(๊ตฌํ˜„ ์ƒ์†)์™ ๋งŒํ•˜๋ฉด ์“ฐ์ง€๋งˆ..extends ์จ์•ผ ํ•œ๋‹ค๋ฉด ๊ธฐ๋Šฅ์— ๋งž๊ฒŒ ์ž˜ ์จ..Factory Method์ฒ˜๋Ÿผ ์“ธ๋ ค๋ฉด ์“ฐ์ง€๋งˆโ€ฆ