Notice
Recent Posts
Link
Today
Total
10-06 00:17
๊ด€๋ฆฌ ๋ฉ”๋‰ด

dingdong coding

Factory Method Pattern ๋ณธ๋ฌธ

๐ŸฐJAVA/Design Pattern

Factory Method Pattern

๐Ÿถ ๊ฐœ๋ฐœ๊ฐœ๋ฐœ ๐Ÿพ 2022. 7. 5. 01:16

ํ•„์š”์„ฑ 

๋จผ์ € Factory Method Pattern ํŒจํ„ด์„ ์™œ ์‚ฌ์šฉํ•ด์•ผํ•˜๋Š”์ง€์— ๋Œ€ํ•ด ์•Œ์•„๋ด…์‹œ๋‹ค.

 

ํ”„๋กœ๊ทธ๋žจ์ด ์ œ๊ณตํ•˜๋Š” ๊ธฐ๋Šฅ์€ ์ƒํ™ฉ์— ๋”ฐ๋ผ ๋ณ€๊ฒฝ๋  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๋˜ํ•œ ๊ธฐ๋Šฅ์˜ ๊ตฌํ˜„์€ ๊ฐœ๋ณ„ ํด๋ž˜์Šค๋ฅผ ํ†ตํ•ด ์ œ๊ณตํ•˜๋Š” ๊ฒƒ์ด ๋ฐ”๋žŒ์งํ•ฉ๋‹ˆ๋‹ค.  ๋•Œ๋ฌธ์— ๊ธฐ๋Šฅ์˜ ๋ณ€๊ฒฝ์ด๋‚˜ ์ƒํ™ฉ์— ๋”ฐ๋ฅธ ๊ธฐ๋Šฅ ์„ ํƒ์€ ํ•ด๋‹น ๊ฐ์ฒด๋ฅผ ์ƒ์„ฑํ•˜๋Š” ์ฝ”๋“œ์˜ ๋ณ€๊ฒฝ์„ ์ดˆ๋ž˜ํ•ฉ๋‹ˆ๋‹ค.

๋˜ํ•œ ์ ์ ˆํ•œ ๊ฐ์ฒด๋ฅผ ์ƒ์„ฑํ•˜๋Š” ์ฝ”๋“œ๋Š” ์ž์ฃผ ์ค‘๋ณต๋  ์ˆ˜๋„ ์žˆ์Šต๋‹ˆ๋‹ค.

์ด๋Ÿฌํ•œ ๊ฒฝ์šฐ ๊ฐ์ฒด๋ฅผ ์ƒ์„ฑํ•˜๋Š” ์ฝ”๋“œ๋ฅผ ์ถ”์ƒํ™”ํ•ด ํ•œ ๊ณณ์—์„œ ๊ด€๋ฆฌํ•˜์ง€ ์•Š์œผ๋ฉด ๋ณ€ํ™”๊ฐ€ ๋ฐœ์ƒ ํ–ˆ์„ ์‹œ ํ•ด๋‹น ํด๋ผ์ด์–ธํŠธ์˜ ์ฝ”๋“œ๋ฅผ ์ „๋ถ€ ์ˆ˜์ •ํ•ด์ฃผ์–ด์•ผํ•˜๋Š” ๋ฌธ์ œ๊ฐ€ ๋ฐœ์ƒํ•ฉ๋‹ˆ๋‹ค. 

 

๊ทธ๋ ‡๋‹ค๋ฉด ์™œ ๊ฐ์ฒด๋ฅผ ๋งŒ๋“ค์–ด๋‚ด๋Š” ๊ณต์žฅ์ด ํ•„์š”ํ• ๊นŒ์š”?

Factory Pattern

Factory์˜ ๋œป์€ ๊ณต์žฅ์œผ๋กœ ์—ฌ๊ธฐ์„œ๋Š” ๊ฐ์ฒด๋ฅผ ๋งŒ๋“ค์–ด๋‚ด๋Š” ๊ณต์žฅ(๋ชจ๋“ˆ)์ž…๋‹ˆ๋‹ค.  ๊ทธ๋ฆฌ๊ณ  ๊ฐ์ฒด ์ƒ์„ฑ์„ ์บก์Šํ™” ํ•˜๋Š” ๊ฒƒ์€ ํŒฉํ† ๋ฆฌ ํŒจํ„ด์ž…๋‹ˆ๋‹ค. 

 

์ฆ‰, ํŒฉํ† ๋ฆฌ๋Š” ์ธ์Šคํ„ด์Šคํ™” ๋กœ์ง์„ ํด๋ผ์ด์–ธํŠธ์— ๋…ธ์ถœ์‹œํ‚ค์ง€ ์•Š๊ณ  ๊ฐ์ฒด๋ฅผ ๋งŒ๋“ญ๋‹ˆ๋‹ค.

 

  ํŒฉํ† ๋ฆฌ ํŒจํ„ด

: ๊ตฌ์ฒด์ ์ธ ๊ฐ์ฒด ์ƒ์„ฑ๊ณผ์ •์„ ํŒฉํ† ๋ฆฌ๋กœ ๋ชจ๋“ˆํ™” ํ•˜์—ฌ ๊ตฌ์ฒด์ ์ธ ๋ถ€๋ถ„์ด ์•„๋‹Œ ์ถ”์ƒ์ ์ธ ๋ถ€๋ถ„์— ์˜์กดํ•  ์ˆ˜์žˆ๋„๋ก ํ•˜๋Š” ๊ฒƒ

: ์ฆ‰, ๊ฐ์ฒด์˜ ์ƒ์„ฑ์ฝ”๋“œ๋ฅผ ๋ณ„๋„์˜ ํด๋ž˜์Šค / ๋ฉ”์†Œ๋“œ๋กœ ๋ถ„๋ฆฌ ํ•˜๋Š” ๊ฒƒ 

: ํŒฉํ† ๋ฆฌ ํŒจํ„ด ์ข…๋ฅ˜  1) ํŒฉํ† ๋ฆฌ ๋ฉ”์†Œ๋“œ ํŒจํ„ด 2) ์ถ”์ƒ ํŒฉํ† ๋ฆฌ ํŒจํ„ด 

 

๊ฐ์ฒด ์ƒ์„ฑ ์ฝ”๋“œ๋ฅผ ๋ณ„๋„์˜ ํด๋ž˜์Šค/๋ฉ”์„œ๋“œ๋กœ ๋ถ„๋ฆฌํ•ด ์‚ฌ์šฉํ•œ๋‹ค๋ฉด ํ•ด๋‹น ํด๋ž˜์Šค/๋ฉ”์„œ๋“œ๋งŒ ๋ณ€๊ฒฝํ•จ์œผ๋กœ์จ ๊ฐ์ฒด ์ƒ์„ฑ๋ฐฉ์‹์˜ ๋ณ€ํ™”์— ํšจ๊ณผ์ ์œผ๋กœ ๋Œ€์‘ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.  ์ฆ‰, OCP์˜ ์›์น™์— ๋”ฐ๋ผ ๊ฐ์ฒด ์ƒ์„ฑ์„ ๋‹ด๋‹นํ•˜๋Š” ํด๋ž˜์Šค๋ฅผ ๋งŒ๋“ค์–ด ํ•œ ๊ณณ์—์„œ ๊ด€๋ฆฌํ•ด ๊ฒฐํ•ฉ๋„๋ฅผ ๋‚ฎ์ถ”๊ธฐ ์œ„ํ•ด ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค. 

 

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

 

 ๊ฒฐํ•ฉ๋„(Coupling)

: ๋ชจ๋“ˆ ๊ฐ„ ์ƒํ˜ธ ์˜์กดํ•˜๋Š” ์ •๋„ ๋˜๋Š” ๋‘ ๋ชจ๋“ˆ ์‚ฌ์ด์˜ ์—ฐ๊ด€๊ด€๊ณ„

: ๊ฒฐํ•ฉ๋„๊ฐ€ ์•ฝํ•  ์ˆ˜๋ก ๋ชจ๋“ˆ์˜ ๋…๋ฆฝ์„ฑ์€ ๋†’์•„์ง„๋‹ค.

: ๋‹ค๋ฅธ ๋ชจ๋“ˆ์— ๋ผ์น˜๋Š” ์˜ํ–ฅ์ด ์ ์–ด์ง€๊ณ  ์œ ์ง€๋ณด์ˆ˜์„ฑ์ด ์ข‹์•„์ง€๋ฏ€๋กœ ๋…๋ฆฝ์„ฑ์ด ๋†’์€ ๋ชจ๋“ˆ์ผ์ˆ˜๋ก ์ข‹์Šต๋‹ˆ๋‹ค. 

Factory Method Pattern

: ๊ฐ์ฒด ์ƒ์„ฑ์„ ์œ„ํ•œ ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ์ •์˜ํ•˜์ง€๋งŒ ์–ด๋–ค ๊ฐ์ฒด๋ฅผ ์ƒ์„ฑํ• ์ง€๋Š” ์ž์‹ํด๋ž˜์Šค๊ฐ€ ๊ฒฐ์ •ํ•˜๋„๋ก ํ•˜๋Š” ํŒจํ„ด

: ์ƒ์†์„ ์‚ฌ์šฉํ•˜์—ฌ ํŒŒ์ƒ ํด๋ž˜์Šค ๋„๋Š” ์„œ๋ธŒ ํด๋ž˜์Šค๋ฅผ ์ด์šฉํ•ด ๊ฐ์ฒด๋ฅผ ์ƒ์„ฑํ•˜๋Š” ๋ฐฉ๋ฒ• 

: ํด๋ผ์ด์–ธํŠธ๊ฐ€ ๋Ÿฐํƒ€์ž„์— ์ž‘์„ฑํ•ด์•ผํ•˜๋Š” ๊ตฌ์ฒด์ ์ธ ํด๋ž˜์Šค๋ฅผ ์•Œ์ง€ ๋ชปํ•˜์ง€๋งŒ ์ž‘์—…์„ ์ˆ˜ํ–‰ํ•  ํด๋ž˜์Šค๋ฅผ ๊ฐ€์ ธ์˜ค๋ ค๊ณ  ํ•  ๋•Œ ์‚ฌ์šฉ 

 

  ๊ฐ์ฒด ์ƒ์„ฑ ์ „๋‹ด ํด๋ž˜์Šค ๋Œ€์‹  ํ•˜์œ„ ํด๋ž˜์Šค์—์„œ ์ ํ•ฉํ•œ ํด๋ž˜์Šค์˜ ๊ฐ์ฒด๋ฅผ ์ƒ์„ฑํ•˜๋Š” ๋ฐฉ์‹์œผ๋กœ ๊ตฌํ˜„ 

 

- ์ •์ธ์ƒ, ์ฑ„ํ™์„ JAVA ๊ฐ์ฒด ์ง€ํ–ฅ ๋””์ž์ธ ํŒจํ„ด, ํ•œ๋น›๋ฏธ๋””์–ด

 

  Product : Factory ๋ฉ”์†Œ๋“œ๊ฐ€ ์ž‘์„ฑํ•˜๋Š” ์˜ค๋ธŒ์ ํŠธ์˜ ์ธํ„ฐํŽ˜์ด์Šค ์ •์˜

  ConcreteProduct : Product ์ธํ„ฐํŽ˜์ด์Šค ๊ตฌํ˜„

•  Creator : Factory ๋ฉ”์†Œ๋“œ ์„ ์–ธ

  ConcreteCreator : Factory ๋ฉ”์†Œ๋“œ๋ฅผ ๊ตฌํ˜„ํ•˜์—ฌ ConcreteProduct์˜ ์ธ์Šคํ„ด์Šค๋ฅผ ๋ฐ˜ํ™˜

Abstract Factory Pattern

: ๊ตฌ์ฒด์ ์ธ ํด๋ž˜์Šค๋ฅผ ๋ช…์‹œ์ ์œผ๋กœ ์ง€์ •ํ•˜์ง€ ์•Š๊ณ  ๊ด€๋ จ ๊ฐ์ฒด ํŒจ๋ฐ€๋ฆฌ๋ฅผ ์ž‘์„ฑํ•˜๊ธฐ ์œ„ํ•œ ์ธํ„ฐํŽ˜์ด์Šค ์ œ๊ณต

: ์ปดํฌ์ง€์…˜์„ ์‚ฌ์šฉํ•˜์—ฌ ๊ฐ์ฒด ์ƒ์„ฑ ์ฑ…์ž„์„ ๋‹ค๋ฅธ ํด๋ž˜์Šค์— ์œ„์ž„

: ์‹œ์Šคํ…œ์ด ์—ฌ๋Ÿฌ ์ œํ’ˆ ๊ตฐ์„ ์ž‘์„ฑํ•ด์•ผํ•˜๊ฑฐ๋‚˜ ๊ตฌํ˜„ ์„ธ๋ถ€์‚ฌํ•ญ์„ ๋…ธ์ถœํ•˜์ง€ ์•Š๊ณ  ์ œํ’ˆ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ ์ œ๊ณตํ•˜๋ ค๋Š” ๊ฒฝ์šฐ ์‚ฌ์šฉ

 

 

 

ํ•™์Šต์— ๋งŽ์€ ๋„์›€์ด ๋œ ๋งํฌ๋ฅผ  ์ฐธ์กฐํ–ˆ์Šต๋‹ˆ๋‹ค. ๐Ÿ™‚

 

์ฐธ์กฐ ๋ฐ ์ถœ์ฒ˜

[java] ๋””์ž์ธ ํŒจํ„ด : ํŒฉํ† ๋ฆฌ vs ํŒฉํ† ๋ฆฌ ๋ฉ”์†Œ๋“œ vs ์ถ”์ƒ ํŒฉํ† ๋ฆฌ

'๐ŸฐJAVA > Design Pattern' ์นดํ…Œ๊ณ ๋ฆฌ์˜ ๋‹ค๋ฅธ ๊ธ€

Strategy Pattern  (0) 2022.07.06
Singleton Pattern  (0) 2022.06.21
[ Object-Oriented Programming ] ๊ฐ์ฒด์ง€ํ–ฅ ํ”„๋กœ๊ทธ๋ž˜๋ฐ  (0) 2022.01.24
Comments