๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ

๐Ÿ“š์ฝ์€ ์ฑ… ์ •๋ฆฌ/๊ฐ์ฒด์ง€ํ–ฅ๋””์ž์ธํŒจํ„ด

[JAVA ๊ฐ์ฒด ์ง€ํ–ฅ ๋””์ž์ธ ํŒจํ„ด] 4์žฅ : ๋””์ž์ธ ํŒจํ„ด

4.1 ๋””์ž์ธ ํŒจํ„ด์˜ ์ดํ•ด

ํ”„๋กœ๊ทธ๋ž˜๋ฐ ๊ธฐ์ˆ ์„ ๋น ๋ฅด๊ณ  ์‰ฝ๊ฒŒ ์ตํž ์ˆ˜ ์žˆ๋Š” ๋ฐฉ๋ฒ•์€ ๋ฌด์—‡์ผ๊นŒ??

 

๋ฐ”๋กœ ํ›Œ๋ฅญํ•œ ํ”„๋กœ๊ทธ๋ž˜๋จธ๊ฐ€ ์ž‘์„ฑํ•œ ์ฝ”๋“œ๋ฅผ ์ฝ๋Š” ๊ฒƒ์ด๋‹ค!!

๊ทธ ํ”„๋กœ๊ทธ๋žจ์—๋Š” ํ”„๋กœ๊ทธ๋ž˜๋จธ๊ฐ€ ์ˆ˜๋…„๊ฐ„ ๊ณ ์ƒํ•˜๋ฉด์„œ ์Œ“์•„๋†“์€ ๊ฒฝํ—˜ ๋“ฑ์ด ๊ณ ์Šค๋ž€ํžˆ ๋…น์•„์žˆ๋‹ค.

 

๊ทธ๋Ÿฌ๋ฏ€๋กœ ๊ฒฝํ—˜์ด ๋ถ€์กฑํ•œ ํ”„๋กœ๊ทธ๋ž˜๋จธ๋“ค์€ ํ›Œ๋ฅญํ•œ ํ”„๋กœ๊ทธ๋ž˜๋จธ๋“ค์ด ๋งŒ๋“ค์–ด๋†“์€ ํŠน์ • ๋ฌธ์ œ์— ๋Œ€ํ•œ ํ•ด๊ฒฐ์ฑ…์„ ์‚ฌ์šฉํ•˜๊ณ  ์‘์šฉํ•˜๋ฉด ๋งค์šฐ ์ข‹์„ ๊ฒƒ์ด๋‹ค.

 

๋””์ž์ธ ํŒจํ„ด์ด๋ž€?

๊ฒฝํ—˜์ด ๋งŽ์€ ์†Œํ”„ํŠธ์›จ์–ด ์—”์ง€๋‹ˆ์–ด๋“ค์ด ์†Œํ”„ํŠธ์›จ์–ด๋ฅผ ์„ค๊ณ„ํ•  ๋•Œ ์ž์ฃผ ๋ฐœ์ƒํ•˜๋Š” ๋ฌธ์ œ๋“ค์˜ ํ•ด๋ฒ•๋“ค์„ ๋ชจ์•„๋†“์€ ๊ฒƒ!

๋””์ž์ธ ํŒจํ„ด์˜ ๊ตฌ์กฐ

๋””์ž์ธ ํŒจํ„ด์˜ ๊ตฌ์กฐ๋Š” 3๊ฐœ์˜ ํ•„์ˆ˜์ ์ธ ์š”์†Œ๋กœ ๊ตฌ์„ฑ๋œ๋‹ค.

  • ์ฝ˜ํ…์ŠคํŠธ : ๋ฌธ์ œ๊ฐ€ ๋ฐœ์ƒํ•˜๋Š” ์—ฌ๋Ÿฌ ์ƒํ™ฉ์„ ๊ธฐ์ˆ  (์ฆ‰, ํŒจํ„ด์ด ์ ์šฉ๋  ์ˆ˜ ์žˆ๋Š” ์ƒํ™ฉ)
  • ๋ฌธ์ œ(Problem) : ํŒจํ„ด์ด ์ ์šฉ๋˜์–ด ํ•ด๊ฒฐ๋  ํ•„์š”๊ฐ€ ์žˆ๋Š” ๋””์ž์ธ ์ด์Šˆ๋ฅผ ๊ธฐ์ˆ 
  • ํ•ด๊ฒฐ(Solution) : ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•˜๋„๋ก ์„ค๊ณ„๋ฅผ ๊ตฌ์„ฑํ•˜๋Š” ์š”์†Œ๋“ค๊ณผ ์š”์†Œ๋“ค ์‚ฌ์ด์˜ ๊ด€๊ณ„, ์ฑ…์ž„, ํ˜‘๋ ฅ ๊ด€๊ณ„๋ฅผ ๊ธฐ์ˆ ํ•œ๋‹ค. (ํ…œํ”Œ๋ฆฟ)

 

'์ฝ˜ํ…์ŠคํŠธ-๋ฌธ์ œ-ํ•ด๊ฒฐ'๋กœ ์ด๋ฃจ์–ด์ง„ ํŒจํ„ด์œผ๋กœ ์„ค๋ช…ํ•œ ์˜ˆ๋ฅผ ๋ณด์ž.

  • ์ฝ˜ํ…์ŠคํŠธ: ํด๋ž˜์Šค๊ฐ€ ๊ฐ์ฒด ์ƒ์„ฑ ๊ณผ์ •์„ ์ œ์–ดํ•ด์•ผ ํ•˜๋Š” ์ƒํ™ฉ
  • ๋ฌธ์ œ: ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์ด ์ „์—ญ์ ์œผ๋กœ ์ ‘๊ทผํ•˜๊ณ  ๊ด€๋ฆฌํ•  ํ•„์š”๊ฐ€ ์žˆ๋Š” ๋ฐ์ดํ„ฐ๋ฅผ ํฌํ•จํ•œ๋‹ค. ๋™์‹œ์— ์ด๋Ÿฌํ•œ ๋ฐ์ดํ„ฐ๋Š” ์‹œ์Šคํ…œ์— ์œ ์ผํ•˜๋‹ค. ์–ด๋–ค ๋ฐฉ์‹์œผ๋กœ ํด๋ž˜์Šค์—์„œ ์ƒ์„ฑ๋˜๋Š” ๊ฐ์ฒด์˜ ์ˆ˜๋ฅผ ์ œ์–ดํ•˜๊ณ  ํด๋ž˜์Šค์˜ ์ธํ„ฐํŽ˜์ด์Šค์— ์ ‘๊ทผํ•˜๋Š” ๊ฒƒ์„ ์ œ์–ดํ•ด์•ผ ํ•˜๋Š”๊ฐ€?
  • ํ•ด๊ฒฐ: ํด๋ž˜์Šค์˜ ์ƒ์„ฑ์ž๋ฅผ public์œผ๋กœ ์ •์˜ํ•˜์ง€ ๋ง๊ณ  private์ด๋‚˜ protected๋กœ ์„ ์–ธํ•ด ์™ธ๋ถ€์—์„œ ์ƒ์„ฑ์ž๋ฅผ ์ด์šฉํ•ด ๊ฐ์ฒด๋ฅผ ์ผ๋‹จ ์ƒ์„ฑํ•  ์ˆ˜ ์—†๊ฒŒ ๋งŒ๋“ค๊ณ  (์ƒ๋žต)

์ด๋Ÿฌํ•œ ๋น„์Šทํ•œ ์ƒํ™ฉ๋งˆ๋‹ค ๊ตฌ๊ตฌ์ ˆ์ ˆํ•˜๊ฒŒ ์„ค๋ช…ํ•ด์•ผํ•œ๋‹ค๋ฉด ์˜คํžˆ๋ ค ์‹œ์Šคํ…œ ์„ค๊ณ„์— ๋ฐฉํ•ด๊ฐ€ ๋  ๊ฒƒ์ด๋‹ค.

๊ทธ๋Ÿฌ๋ฏ€๋กœ ์šฐ๋ฆฌ๋Š” ์œ„ ํŒจํ„ด์— ์ ์ ˆํ•œ ์ด๋ฆ„์„ ๋ถ€์—ฌํ•˜์—ฌ ํ•˜๋‚˜์˜ ์‹œ์Šคํ…œ์„ ๋””์ž์ธํ•  ๋•Œ ๊ณตํ†ต ์–ธ์–ด ์—ญํ• ์„ ํ•˜๋„๋ก ํ–ˆ๋‹ค.

์ด ๊ณตํ†ต ์–ธ์–ด๋ฅผ ํ†ตํ•ด ์ข€ ๋” ํšจ์œจ์ ์œผ๋กœ ํ˜‘๋™์ž‘์—…์„ ํ•  ์ˆ˜ ์žˆ๋‹ค.

 

์œ„ ํŒจํ„ด์˜ ์ƒํ™ฉ์€ '์‹ฑ๊ธ€ํ„ด'์ด๋ผ๋Š” ์ด๋ฆ„์ด ๋ถ€์—ฌ๋˜์—ˆ๋‹ค.

 

'์‹ฑ๊ธ€ํ„ด'์ด๋ผ๋Š” ๊ณตํ†ต ์–ธ์–ด๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ์–ด๋–ค ์ƒํ™ฉ ๋ฐœ์ƒ ์‹œ ๋ˆ„๊ตฌ๋‚˜ ๊ณต๊ฐํ•  ์ˆ˜ ์žˆ๋Š” ๊ฒ€์ฆ๋œ ๋ฐฉ๋ฒ•์„ ์‰ฝ๊ฒŒ ์„ ํƒํ•  ์ˆ˜ ์žˆ๋‹ค.

KEYPOINT : ํŒจํ„ด์€ ๊ณตํ†ต์˜ ์–ธ์–ด๋ฅผ ๋งŒ๋“ค์–ด ์˜์‚ฌ์†Œํ†ต์„ ์›ํ• ํ•˜๊ฒŒ ํ•œ๋‹ค. (ํ˜‘์—… ์‹œ ๋งค์šฐ ์ค‘์š”!!)

4.2 GoF ๋””์ž์ธ ํŒจํ„ด

4๋ช…์˜ ๊ฐœ๋ฐœ์ž๋“ค์ด ๋””์ž์ธ ํŒจํ„ด์„ 23๊ฐ€์ง€๋กœ ์ •๋ฆฌํ•˜๊ณ  "์ƒ์„ฑ, ๊ตฌ์กฐ, ํ–‰์œ„" 3๊ฐ€์ง€๋กœ ๋ถ„๋ฅ˜ํ•จ.

 

GoF ๋””์ž์ธ ํŒจํ„ด ๋ถ„๋ฅ˜(https://velog.io/@namezin/GoF-design-pattern)

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

-> ex) ์œ„ ๊ทธ๋ฆผ์˜ ์ƒ์„ฑ ํŒจํ„ด์„ ๋ณด์ž.

 

๊ตฌ์กฐ ํŒจํ„ด์€ ํด๋ž˜์Šค๋‚˜ ๊ฐ์ฒด๋ฅผ ์กฐํ•ฉํ•ด ๋” ํฐ ๊ตฌ์กฐ๋ฅผ ๋งŒ๋“œ๋Š” ํŒจํ„ด์ด๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด ์„œ๋กœ ๋‹ค๋ฅธ ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ์ง€๋‹Œ 2๊ฐœ์˜ ๊ฐ์ฒด๋ฅผ ๋ฌถ์–ด ๋‹จ์ผ ์ธํ„ฐํŽ˜์ด์Šค๋กœ ์ œ๊ณตํ•˜๊ฑฐ๋‚˜ ๊ฐ์ฒด๋“ค์„ ๋ฌถ์–ด ์ƒˆ๋กœ์šด ๊ธฐ๋Šฅ์„ ์ œ๊ณตํ•˜๋Š” ํŒจํ„ด์ด๋‹ค.

-> ex) ์œ„ ๊ทธ๋ฆผ์˜ ๊ตฌ์กฐ ํŒจํ„ด์„ ๋ณด์ž.

 

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

-> ex) ์œ„ ๊ทธ๋ฆผ์˜ ํ–‰์œ„ ํŒจํ„ด์„ ๋ณด์ž.

4.3 UML๊ณผ ๋””์ž์ธ ํŒจํ„ด

UML 2.0์—์„œ ๋””์ž์ธ ํŒจํ„ด์„ ํ‘œํ˜„ํ•˜๋Š” ๋„๊ตฌ --> ์ปฌ๋ ˆ๋ณด๋ ˆ์ด์…˜

4.3.1 ์ปฌ๋ ˆ๋ณด๋ ˆ์ด์…˜

์ปฌ๋ ˆ๋ณด๋ ˆ์ด์…˜

์ปฌ๋ ˆ๋ณด๋ ˆ์ด์…˜์€ ๊ฐ์ฒด๊ฐ€ ์ˆ˜ํ–‰ํ•˜๋Š” ์—ญํ• ๋“ค์˜ ํ˜‘๋ ฅ์„ ํ‘œํ˜„ํ•ด์ค€๋‹ค.

UML์—์„œ ์ปฌ๋ ˆ๋ณด๋ ˆ์ด์…˜์€ ํƒ€์›์„ ์‚ฌ์šฉํ•˜๋ฉฐ ํƒ€์› ๋‚ด๋ถ€์— ํ˜‘๋ ฅ์„ ํ•„์š”๋กœ ํ•˜๋Š” ์—ญํ• ๋“ค๊ณผ ๊ทธ๋“ค ์‚ฌ์ด์˜ ๊ด€๊ณ„๋ฅผ ํ‘œํ˜„ํ•œ๋‹ค.

 

์ปฌ๋ ˆ๋ณด๋ ˆ์ด์…˜ ์–ด์ปค๋Ÿฐ์Šค๋Š” ๋” ๊ตฌ์ฒด์ ์ธ ์ƒํ™ฉ์—์„œ์˜ ์ปฌ๋ ˆ๋ณด๋ ˆ์ด์…˜ ์ ์šฉ์„ ํ‘œํ˜„ํ•ด์ค€๋‹ค.

์œ„ ์˜ˆ์‹œ์—์„œ ๋Œ€์ถœ์ž ์—ญํ• ์€ "์€ํ–‰", ๋‹ด๋ณด ์—ญํ• ์€ "์ง‘", ๋Œ€์ถœ์ธ์€ "์‚ฌ๋žŒ"์ด๋‹ค.

์ฆ‰, ์ปฌ๋ ˆ๋ณด๋ ˆ์ด์…˜ ์–ด์ปค๋Ÿฐ์Šค๋Š” ์ปฌ๋ ˆ๋ณด๋ ˆ์ด์…˜์— ์ฐธ๊ฐ€ํ•˜๋Š” ์‘์šฉ ํด๋ž˜์Šค์— ์˜์กดํ•˜๋ฉฐ ์˜์กด ๊ด€๊ณ„์— ๋ถ™์€ ๋ ˆ์ด๋ธ”์€ ์‘์šฉ ํด๋ž˜์Šค๊ฐ€ ์ปฌ๋ ˆ๋ณด๋ ˆ์ด์…˜์— ์ˆ˜ํ–‰ํ•˜๋Š” ์—ญํ• ์„ ๋‚˜ํƒ€๋‚ธ๋‹ค.

 

4.3.2 ์ˆœ์ฐจ ๋‹ค์ด์–ด๊ทธ๋žจ

์ˆœ์ฐจ ๋‹ค์ด์–ด๊ทธ๋žจ์€ UML 2.0์—์„œ ๊ฐ์ฒด๋“ค์˜ ์ƒํ˜ธ์ž‘์šฉ์„ ๋‚˜ํƒ€๋‚ด๋Š” ๋‹ค์ด์–ด๊ทธ๋žจ ์ค‘ ํ•˜๋‚˜์ด๋‹ค. ์ˆœ์ฐจ ๋‹ค์ด์–ด๊ทธ๋žจ์€ ๊ฐ์ฒด๋“ค ์‚ฌ์ด์˜ ๋ฉ”์‹œ์ง€ ์†ก์‹ ๊ณผ ๊ทธ๋“ค์˜ ์ˆœ์„œ๋ฅผ ๋‚˜ํƒ€๋‚ธ๋‹ค. ๊ฐ์ฒด๋Š” ๊ฐ€์žฅ ์œ—๋ถ€๋ถ„์— ํ‘œํ˜„๋˜๊ณ , ์™ผ์ชฝ์—์„œ ์˜ค๋ฅธ์ชฝ์œผ๋กœ ๊ฐ์ฒด๋“ค์„ ๋‚˜์—ดํ•œ๋‹ค.

 

๊ฐ์ฒด ์•„๋ž˜์— ์ ์„ ์ด ๋ป—์–ด ๋‚˜๊ฐ€๋Š” ๊ฒƒ์€ '์ƒ๋ช…์„ '์ด๋ผ ํ•˜๊ณ  ํ•ด๋‹น ๊ฐ์ฒด๊ฐ€ ์กด์žฌํ•จ์„ ๋œปํ•œ๋‹ค.

๋˜ํ•œ, ์ƒ๋ช…์„ ์„ ๋”ฐ๋ผ์„œ ์ข๊ณ  ๊ธด ์‚ฌ๊ฐํ˜•์ด ๋‚˜์˜ฌ ์ˆ˜ ์žˆ๋‹ค. ์ด ์ƒ์ž๋ฅผ 'ํ™œ์„ฑ ๊ตฌ๊ฐ„'์ด๋ผ ํ•œ๋‹ค. (๊ฐ์ฒด๊ฐ€ ์—ฐ์‚ฐ์„ ์‹คํ–‰ํ•˜๋Š” ์ƒํƒœ)

 

๊ฐ์ฒด ์‚ฌ์ด์˜ ๋ฉ”์‹œ์ง€๋Š” ํ™”์‚ดํ‘œ๋กœ ํ‘œ์‹œํ•œ๋‹ค. ๋จธ๋ฆฌ ๋ถ€๋ถ„์ด ์ฑ„์›Œ์กŒ๋‹ค๋ฉด ๋™๊ธฐ, ์•ˆ ์ฑ„์›Œ์กŒ๋‹ค๋ฉด ๋น„๋™๊ธฐ์ด๋‹ค.

<<create>>, <<delete>> ์™€ ๊ฐ™์€ ์Šคํ…Œ๋ ˆ์˜ค ํƒ€์ž…์„ ๋ถ™์—ฌ์„œ ๋ฉ”์‹œ์ง€๋ฅผ ์†ก์‹ ํ•  ์ˆ˜๋„ ์žˆ๋‹ค.

์ˆœ์ฐจ ๋‹ค์ด์–ด๊ทธ๋žจ ์˜ˆ์‹œ

๋ฉ”์‹œ์ง€๋ฅผ ํ‘œํ˜„ํ•  ๋•Œ ํ˜•์‹ ===> [์‹œํ€€์Šค๋ฒˆํ˜ธ] [๊ฐ€๋“œ]: ๋ฐ˜ํ™˜ ๊ฐ’:=๋ฉ”์‹œ์ง€ ์ด๋ฆ„([์ธ์ž ๋ฆฌ์ŠคํŠธ])

์œ„ ํ˜•์‹์—์„œ๋Š” ๋ฉ”์‹œ์ง€ ์ด๋ฆ„ ๋นผ๊ณ  ๋ชจ๋‘ ์ƒ๋žต ๊ฐ€๋Šฅํ•˜๋‹ค.

์ ์„ ํ™”์‚ดํ‘œ๋Š” '์‘๋‹ต' ๋ฉ”์‹œ์ง€๋ฅผ ํ‘œํ˜„ํ•œ๋‹ค.