Skip to content

Latest commit

ย 

History

History
58 lines (37 loc) ยท 3.7 KB

FactoryMethodPattern-junha.md

File metadata and controls

58 lines (37 loc) ยท 3.7 KB

[์ƒ์„ฑ ํŒจํ„ด]Factory Method Pattern


ํŒฉํ† ๋ฆฌ ๋ฉ”์„œ๋“œ ํŒจํ„ด์ด๋ž€?

ํŒฉํ† ๋ฆฌ ๋ฉ”์„œ๋“œ ํŒจํ„ด์€ ๊ฐ์ฒด์ง€ํ–ฅ ๋””์ž์ธ ํŒจํ„ด์˜ ํ•˜๋‚˜์ธ๋ฐ Factory emthod๋Š” ๋ถ€๋ชจ ํด๋ž˜์Šค์— ์•Œ๋ ค์ง€์ง€ ์•Š๋Š” ๊ตฌ์ฒด ํด๋ž˜์Šค๋ฅผ ์ƒ์„ฑํ•˜๋Š” ํŒจํ„ด์ด๋‹ค. ๋•Œ๋ฌธ์— ์ž์‹ ํด๋ž˜์Šค๊ฐ€ ์–ด๋–ค ๊ฐ์ฒด๋ฅผ ์ƒ์„ฑํ•ด์•ผ ํ• ์ง€ ์•Œ๋ ค์ฃผ๋Š” ํŒจํ„ด์ด๊ธฐ๋„ ํ•œ๋‹ค. ๊ทธ๋ฆฌ๊ณ  ์ฃผ๋กœ ํด๋ž˜์Šค ์ฝ”๋“œ์— ๊ตฌ์ฒด ํด๋ž˜์Šค ์ด๋ฆ„์„ ๊ฐ์ถ”๊ฐ€ ์œ„ํ•ด์„œ๋„ ์‚ฌ์šฉ๋˜๋Š” ํŒจํ„ด์ž…๋‹ˆ๋‹ค.

์ฆ‰ ๋ถ€๋ชจ ํด๋ž˜์Šค์—์„œ ๊ฐ์ฒด๋“ค์„ ์ƒ์„ฑํ•  ์ˆ˜ ์žˆ๋Š” ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ์ œ๊ณตํ•˜์ง€๋งŒ, ์ž์‹ ํด๋ž˜์Šค๋“ค์ด ์ƒ์„ฑ๋  ๊ฐ์ฒด์˜ ์œ ํ˜•์„ ๋ณ€๊ฒฝํ•  ์ˆ˜ ์žˆ๋„๋ก ํ•˜๋Š” ํŒจํ„ด์ž…๋‹ˆ๋‹ค.


ํŒฉํ† ๋ฆฌ ๋ฉ”์„œ๋“œ ํŒจํ„ด ์‰ฝ๊ฒŒ ์ดํ•ดํ•˜๊ธฐ

์˜ˆ๋ฅผ ๋“ค์–ด์„œ ๊ณต์žฅ๊ด€๋ฆฌ ์•ฑ์„ ๋งŒ๋“ค๊ณ  ์žˆ๋‹ค๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค. ์•ฑ ๊ธฐ๋Šฅ ์ค‘ ํŠธ๋Ÿญ ์šด์†ก์„ ์ฒ˜๋ฆฌํ•  ์ˆ˜ ์žˆ๋Š” ํŠธ๋Ÿญ ํด๋ž˜์Šค๊ฐ€ ์žˆ๋‹ค๊ณ  ์ƒ๊ฐํ•ด๋ด…์‹œ๋‹ค. ํ•˜์ง€๋งŒ ์–ด๋Š ๋‚  ๋น„ํ–‰๊ธฐ ๊ด€๋ จ ๋ฐฐ์†ก์„ ์ง€์›ํ•˜๊ฒ ๋‹ค๊ณ  ๋ฐœํ‘œ๊ฐ€ ๋‚ฌ์Šต๋‹ˆ๋‹ค. ๊ทผ๋ฐ ์ €๋Š” ์ง€์ƒ๋งŒ ํ•  ์ค„ ์•Œ๊ณ  base ์ฝ”๋“œ๋ฅผ ํŠธ๋Ÿญ ํด๋ž˜์Šค์™€ ๊ฒฐํ•ฉ๋ผ์žˆ๋„๋ก ๋งŒ๋“ค์—ˆ๋‹ค๊ณ  ์ƒ๊ฐํ•ฉ์‹œ๋‹ค. ๊ทธ๋Ÿฌ๋ฉด ๋งŒ์•ฝ ์ œ๊ฐ€ ์—ฌ๊ธฐ์„œ ๋น„ํ–‰๊ธฐ๋ฅผ ์ถ”๊ฐ€ํ•˜๊ฒŒ ๋˜๋ฉด ๋˜๋Š” ๋น„ํ–‰์ฝ”๋“œ๋ฅผ ์ž˜๋ชป ๋„ฃ์—ˆ๋‹ค๊ฐ€๋Š” ์œก์ƒ์„ ๋‹ฌ๋ฆฌ๋Š” ๋น„ํ–‰๊ธฐ ๋˜๋Š” ํ•˜๋Š˜์„ ๋‚ ์•„๋‹ค๋‹ˆ๋Š” ํŠธ๋Ÿญ์ด ์™„์„ฑ๋  ๊ฒƒ์ž…๋‹ˆ๋‹ค. ๋˜๋Š” ์ฝ”๋“œ๋ฅผ ์‹น ๋‹ค ๋ฐ”๊พธ๋Š” ๋ฐฉ๋ฒ•๋„ ์žˆ์ฃ  ํ•˜์ง€๋งŒ base ์ฝ”๋“œ๋ฅผ ๋ณ€๊ฒฝํ•˜๋Š” ๊ฒƒ์€ ๋งค์šฐ ํž˜๋“  ์ผ์ž…๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋ฉด ํŒฉํ† ๋ฆฌ ๋ฉ”์„œ๋“œ๋Š” ์ด๋Ÿฐ ์ƒํ™ฉ์„ base ์ฝ”๋“œ๋ฅผ ์ „๋ถ€ ๋œฏ์–ด๊ณ ์น˜๋Š” ๊ฒƒ์ด ์•„๋‹Œ ํ˜„์žฌ ์šด์†ก ์ถ”๊ฐ€ ์š”์ฒญ์ด ๋“ค์–ด์˜ค๋ฉด ์š”์ฒญ์— ๋งž๊ฒŒ ์šด์†ก์„ ์ถ”๊ฐ€ํ•ด์ฃผ์‹ ๋‹ค๊ณ  ์ƒ๊ฐํ•˜์‹œ๋ฉด ์‰ฝ์Šต๋‹ˆ๋‹ค. ๋•Œ๋ฌธ์— ํŒฉํ† ๋ฆฌ ๋ฉ”์„œ๋“œ์˜ ํŠน์ด์ ์€ ์–ด๋–ค ์šด์†ก ์ˆ˜๋‹จ์ด ์ถ”๊ฐ€๋ ์ง€ ๋ชฐ๋ผ๋„ ์š”์ฒญ์— ๋งž๋Š” ์šด์†ก ๊ธฐ๋Šฅ์„ ์ถ”๊ฐ€ํ•ด ์ฃผ๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค.


ํŒฉํ† ๋ฆฌ ๋ฉ”์„œ๋“œ ํŒจํ„ด์€ ์ฃผ๋กœ ์–ด๋–ค ๊ฒฝ์šฐ์— ์‚ฌ์šฉํ• ๊นŒ?

๋‚˜์ค‘์— ์•ฑ์— ๊ธฐ๋Šฅ์ด ์ƒ‰๋‹ค๋ฅธ ๊ฒƒ๋“ค์ด ๋Š˜์–ด๋‚˜๋Š” ๊ฒฝ์šฐ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์ด ์ข‹๋‹ค๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค. ์ด์œ ๋Š” ๊ธฐ๋Šฅ ์ถ”๊ฐ€ํ•  ๋•Œ ํ•˜์œ„ํด๋ž˜์Šค๋งŒ ์ถ”๊ฐ€ํ•˜๋ฉด ๋˜๊ธฐ์— ์œ ์ง€๋ณด์ˆ˜๊ฐ€ ๋†’์•„์งˆ ์ˆ˜ ์žˆ๋‹ค๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค. ๋•Œ๋ฌธ์— ์ €๋Š” ๋งŽ์€ ๊ธฐ๋Šฅ๋“ค์ด ์ƒ๊ฒจ๋‚˜๋Š” ํ”„๋กœ์ ํŠธ์— ๋„์ž…ํ•˜๋ฉด ์ข‹์„ ๊ฒƒ ๊ฐ™๋‹ค๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค.


ํŒฉํ† ๋ฆฌ ๋ฉ”์„œ๋“œ ํŒจํ„ด ๊ตฌ์กฐ ์ดํ•ดํ•ด ๋ณด๊ธฐ!

ConcreteCreator -> Creator -> Product <- ConcreteProduct

ConcreteCreator = Creator๋ฅผ ๊ฐ€์ง€๊ณ  ์žˆ๊ณ  Product์— ๋งž๊ฒŒ ๊ตฌ์ฒด์  ๊ธฐ๋Šฅ ์„ค๊ณ„

Creator = Factory์— ๊ธฐ๋ณธ ์—ญํ• ์„ ์ •์˜ํ•˜๋Š” ๊ฐ์ฒด

Product = Concrete Product๊ฐ€ ํ•ด์•ผ ํ•  ๋™์ž‘์„ ์„ ์–ธํ•˜๋Š” ๊ฐ์ฒด

Concrete Product = Product๋ฅผ ์ฑ„ํƒํ•˜๋ฉฐ ๊ทธ์— ๋งž๊ฒŒ ๋งŒ๋“  ์‹ค์ œ ๊ฐ์ฒด


ํŒฉํ† ๋ฆฌ ๋ฉ”์„œ๋“œ ํŒจํ„ด์˜ ์žฅ๋‹จ์ 

์žฅ์ 

  • ํ”„๋กœํ† ์ฝœ์€ ๊ธฐ๋ณธ ๊ธฐ๋Šฅ์„ ์ •์˜ํ•˜๋Š” ์šฉ๋„์ด๊ธฐ ๋•Œ๋ฌธ์— ๊ธฐ์กด ์ฝ”๋“œ๋ฅผ ๋ณ€๊ฒฝํ•˜์ง€ ์•Š๊ณ  ํ•˜์œ„ ํด๋ž˜์Šค๋ฅผ ์ถ”๊ฐ€ํ•  ์ˆ˜ ์žˆ๊ธฐ ๋•Œ๋ฌธ์— ์œ ์—ฐํ•˜๊ณ  ํ™•์žฅ์„ฑ์ด ๋†’๋‹ค.
  • ์ฝ”๋“œ ์ˆ˜์ •์ด ์ƒ๊ฒจ๋„ ํŒฉํ† ๋ฆฌ ๋ฉ”์„œ๋“œ๋งŒ ์ˆ˜์ •ํ•˜๋ฉด ๋˜๊ธฐ ๋•Œ๋ฌธ์— ์ˆ˜์ •์— ์šฉ์ดํ•˜๋‹ค.
  • ์œ ์ง€๋ณด์ˆ˜ ๊ด€๋ฆฌ๊ฐ€ ํŽธํ•ด์ง„๋‹ค.
  • ๊ฐœ๋ฐฉ/ํ์‡„ ์›์น™์„ ์ˆ˜์šฉํ•˜๊ณ  ์žˆ์–ด์„œ ๊ธฐ์กด ํด๋ผ์ด์–ธํŠธ์— ์ฝ”๋“œ๋ฅผ ํ›ผ์†ํ•˜์ง€ ์•Š๊ณ  ์‰ฝ๊ฒŒ ์›ํ•˜๋Š” ๊ฒƒ์„ ๋„์ž…ํ•  ์ˆ˜ ์žˆ๋‹ค

๋‹จ์ 

  • Product๋ฅผ ์ถ”๊ฐ€ํ•  ๊ฒฝ์šฐ ์ƒˆ๋กœ์šด ํ•˜์œ„ํด๋ž˜์Šค๋ฅผ ์ •์˜ํ•ด์•ผ ํ•˜๊ธฐ ๋•Œ๋ฌธ์— ๋ถˆํ•„์š”ํ•œ ํด๋ž˜์Šค ์ •์˜๊ฐ€ ์ƒ๊ฒจ์„œ ์ฝ”๋“œ๊ฐ€ ๋ณต์žกํ•ด์งˆ ์ˆ˜๋„ ์žˆ๋‹ค
  • ์ค‘์ฒฉ๋˜์–ด ์‚ฌ์šฉํ•˜๋ฉด ์ฝ”๋“œ๊ฐ€ ๋งค์šฐ ๋ณต์žกํ•ด์ง„๋‹ค.

ํŒฉํ† ๋ฆฌ ๋ฉ”์„œ๋“œ ์˜ˆ์ œ ์ฝ”๋“œ

FactoryMethod Pattern ์˜ˆ์ œ์ฝ”๋“œ


์˜ค๋Š˜๋„ ๊ธด ๊ธ€ ์ฝ์–ด์ฃผ์…”์„œ ๊ฐ์‚ฌํ•ฉ๋‹ˆ๋‹ค! ์ข‹์€ ํ•˜๋ฃจ ๋ณด๋‚ด์„ธ์š”~