๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ
  • ๐Ÿ‘ฉ๐Ÿปโ€๐Ÿ’ป ๐ŸŒฎ ๐Ÿ’ฌ
๐Ÿ“š book/๊ฐ์ฒด์ง€ํ–ฅ์˜ ์‚ฌ์‹ค๊ณผ ์˜คํ•ด

07 ํ•จ๊ป˜ ๋ชจ์œผ๊ธฐ

by ๋ฐ”์ฟ„๋ฆฌ 2022. 1. 27.

์ฝ”๋“œ์™€ ๋ชจ๋ธ์„ ๋ฐ€์ ‘ํ•˜๊ฒŒ ์—ฐ๊ด€์‹œํ‚ค๋Š” ๊ฒƒ์€ ์ฝ”๋“œ์— ์˜๋ฏธ๋ฅผ ๋ถ€์—ฌํ•˜๊ณ  ๋ชจ๋ธ์„ ์ ์ ˆํ•˜๊ฒŒ ํ•œ๋‹ค.


๋งˆํ‹ด ํŒŒ์šธ๋Ÿฌ๋Š” ๊ฐ์ฒด์ง€ํ–ฅ ์„ค๊ณ„ ์•ˆ์— ์กด์žฌํ•˜๋Š” ์„ธ ๊ฐ€์ง€ ์ƒํ˜ธ ์—ฐ๊ด€๋œ ๊ด€์ ์„ ๊ฐ๊ฐ ๊ฐœ๋… ๊ด€์ , ๋ช…์„ธ ๊ด€์ , ๊ตฌํ˜„ ๊ด€์ ์ด๋ผ๊ณ  ๋ถ€๋ฅธ๋‹ค.

 

 ๐Ÿ”Ž ๊ฐœ๋… ๊ด€์  (Conceptual Perspective) 

 

๊ฐœ๋… ๊ด€์ ์—์„œ์˜ ์„ค๊ณ„๋Š” ๋„๋ฉ”์ธ ์•ˆ์— ์กด์žฌํ•˜๋Š” ๊ฐœ๋…๊ณผ ๊ฐœ๋…๋“ค ์‚ฌ์ด์˜ ๊ด€๊ณ„๋ฅผ ํ‘œํ˜„ํ•œ๋‹ค.

(๋„๋ฉ”์ธ์ด๋ž€ ์‚ฌ์šฉ์ž๋“ค์ด ๊ด€์‹ฌ์„ ๊ฐ€์ง€๊ณ  ์žˆ๋Š” ํŠน์ • ๋ถ„์•ผ๋‚˜ ์ฃผ์ œ๋ฅผ ๋งํ•œ๋‹ค.)

์ด ๊ด€์ ์€ ์‚ฌ์šฉ์ž๊ฐ€ ๋„๋ฉ”์ธ์„ ๋ฐ”๋ผ๋ณด๋Š” ๊ด€์ ์„ ๋ฐ˜์˜ํ•œ๋‹ค. ๋”ฐ๋ผ์„œ ์‹ค์ œ ๋„๋ฉ”์ธ์˜ ๊ทœ์น™๊ณผ ์ œ์•ฝ์„ ์ตœ๋Œ€ํ•œ ์œ ์‚ฌํ•˜๊ฒŒ ๋ฐ˜์˜ํ•˜๋Š” ๊ฒƒ์ด ํ•ต์‹ฌ์ด๋‹ค.

 

 ๐Ÿ”Ž ๋ช…์„ธ ๊ด€์  (Specification Perspective) 

 

์‚ฌ์šฉ์ž์˜ ์˜์—ญ์ธ ๋„๋ฉ”์ธ์„ ๋ฒ—์–ด๋‚˜ ๊ฐœ๋ฐœ์ž์˜ ์˜์—ญ์ธ ์†Œํ”„ํŠธ์›จ์–ด๋กœ ์ดˆ์ ์ด ์˜ฎ๊ฒจ์ง„๋‹ค. → ๊ฐ์ฒด์˜ ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ๋ฐ”๋ผ๋ณด๊ฒŒ ๋œ๋‹ค.

๋ช…์„ธ ๊ด€์ ์—์„œ ํ”„๋กœ๊ทธ๋ž˜๋จธ๋Š” ๊ฐ์ฒด๊ฐ€ ํ˜‘๋ ฅ์„ ์œ„ํ•ด '๋ฌด์—‡'์„ ํ•  ์ˆ˜ ์žˆ๋Š”๊ฐ€์— ์ดˆ์ ์„ ๋งž์ถ˜๋‹ค.

* ๋ช…์„ธ ๊ด€์ ์™€ ๊ตฌํ˜„ ๊ด€์ ์„ ๋ช…ํ™•ํ•˜๊ฒŒ ๋ถ„๋ฆฌํ•ด์•ผ ํ•œ๋‹ค.

 

 ๐Ÿ”Ž ๊ตฌํ˜„ ๊ด€์  (Implementation Perspective) 

 

๊ตฌํ˜„ ๊ด€์ ์˜ ์ดˆ์ ์€ ๊ฐ์ฒด๋“ค์ด ์ฑ…์ž„์„ ์ˆ˜ํ–‰ํ•˜๋Š” ๋ฐ ํ•„์š”ํ•œ ๋™์ž‘ํ•˜๋Š” ์ฝ”๋“œ๋ฅผ ์ž‘์„ฑํ•˜๋Š” ๊ฒƒ์ด๋‹ค.

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

 

 โ˜•๏ธ  ์ปคํ”ผ ์ „๋ฌธ์  ๋„๋ฉ”์ธ 

์ปคํ”ผ ์ „๋ฌธ์ ์—์„œ ์ปคํ”ผ๋ฅผ ์ฃผ๋ฌธํ•˜๋Š” ๊ณผ์ •์„ ๊ฐ์ฒด๋“ค์˜ ํ˜‘๋ ฅ ๊ด€๊ณ„๋กœ ๊ตฌํ˜„ํ•ด๋ณด์ž.

 

  ๋ฉ”๋‰ดํŒ  

 · ๋„ค๊ฐ€์ง€ ๋ฉ”๋‰ด : ์•„๋ฉ”๋ฆฌ์นด๋…ธ, ์นดํ‘ธ์น˜๋…ธ, ์นด๋ผ๋ฉœ ๋งˆํ‚ค์•ผ๋˜, ์—์Šคํ”„๋ ˆ์†Œ

 · ๋ฉ”๋‰ด ํ•ญ๋ชฉ๋“ค ์—ญ์‹œ ๊ฐ์ฒด๋กœ ๋ณผ ์ˆ˜ ์žˆ๋‹ค.

 · ๋”ฐ์„œ ๋ฉ”๋‰ดํŒ์€ ๋„ค ๊ฐ€์ง€ ๋ฉ”๋‰ด ํ•ญ๋ชฉ ๊ฐ์ฒด๋“ค์„ ํฌํ•จํ•˜๋Š” ๊ฐ์ฒด๋ผ๊ณ  ๋ณผ ์ˆ˜ ์žˆ๋‹ค.

 

  ์†๋‹˜  

 · ์†๋‹˜ ์—ญ์‹œ ํ•˜๋‚˜์˜ ๊ฐ์ฒด

 · ๋ฉ”๋‰ดํŒ์„ ๋ณด๊ณ  ๋ฐ”๋ฆฌ์Šคํƒ€์—๊ฒŒ ์›ํ•˜๋Š” ์ปคํ”ผ๋ฅผ ์ฃผ๋ฌธํ•œ๋‹ค.

 

  ๋ฐ”๋ฆฌ์Šคํƒ€  

 · ์ž์œจ์ ์œผ๋กœ ์ปคํ”ผ๋ฅผ ์ œ์กฐํ•˜๋Š” ๊ฐ์ฒด๋กœ ๋ณผ ์ˆ˜ ์žˆ๋‹ค.

 · ๋ฐ”๋ฆฌ์Šคํƒ€๊ฐ€ ์ œ์กฐํ•˜๋Š” ์ปคํ”ผ ์—ญ์‹œ ๊ฐ์ฒด๋กœ ๋ณผ ์ˆ˜ ์žˆ๋‹ค.

 

๊ฐ์ฒด์ง€ํ–ฅ ๊ด€์ ์—์„œ ์ปคํ”ผ ์ „๋ฌธ์ ์ด๋ผ๋Š” ๋„๋ฉ”์ธ์€ ์†๋‹˜ ๊ฐ์ฒด, ๋ฉ”๋‰ด ํ•ญ๋ชฉ ๊ฐ์ฒด, ๋ฉ”๋‰ดํŒ ๊ฐ์ฒด, ๋ฐ”๋ฆฌ์Šคํƒ€ ๊ฐ์ฒด, ์ปคํ”ผ ๊ฐ์ฒด๋กœ ๊ตฌ์„ฑ๋œ ์ž‘์€ ์„ธ์ƒ์ด๋‹ค.

 

๋™์ ์ธ ๊ฐ์ฒด๋ฅผ ์ •์ ์ธ ํƒ€์ž…์œผ๋กœ ์ถ”์ƒํ™”ํ•ด์„œ ๋ณต์žก์„ฑ์„ ๋‚ฎ์ถฐ์•ผ ํ•œ๋‹ค.

์ƒํƒœ์™€ ๋ฌด๊ด€ํ•˜๊ฒŒ ๋™์ผํ•˜๊ฒŒ ํ–‰๋™ํ•  ์ˆ˜ ์žˆ๋Š” ๊ฐ์ฒด๋“ค์€ ๋™์ผํ•œ ํƒ€์ž…์œผ๋กœ ๋ถ„๋ฅ˜ํ•  ์ˆ˜ ์žˆ๋‹ค.

 

  ๋ฉ”๋‰ดํŒ ํƒ€์ž… - ๋ฉ”๋‰ด ํ•ญ๋ชฉ ํƒ€์ž…  

 · ํ•˜๋‚˜์˜ ๋ฉ”๋‰ดํŒ ๊ฐ์ฒด๋Š” ๋‹ค์ˆ˜์˜ ๋ฉ”๋‰ด ํ•ญ๋ชฉ ๊ฐ์ฒด๋กœ ๊ตฌ์„ฑ๋ผ ์žˆ๋‹ค.

 · ๋ฉ”๋‰ดํŒ๊ณผ ๋ฉ”๋‰ด ํ•ญ๋ชฉ ๊ฐ์ฒด๋Š” ๋”ฐ๋กœ ๋–จ์–ด์ ธ ์กด์žฌํ•˜์ง€ ์•Š์œผ๋ฉฐ ํ•˜๋‚˜์˜ ๋‹จ์œ„๋กœ ์›€์ง์ธ๋‹ค.

 · ๋ฉ”๋‰ด ํ•ญ๋ชฉ์ด ๋ฉ”๋‰ดํŒ์— ํฌํ•จ๋˜์—ˆ๋‹ค๊ณ  ํ‘œํ˜„ํ•  ์ˆ˜ ์žˆ๊ณ , ์ด๋ฅผ ํฌํ•จ(containment) ๊ด€๊ณ„ ๋˜๋Š” ํ•ฉ์„ฑ(composition) ๊ด€๊ณ„๋ผ๊ณ  ํ•œ๋‹ค.

 

  ์†๋‹˜ ํƒ€์ž… - ๋ฉ”๋‰ดํŒ ํƒ€์ž…  

 · ์†๋‹˜ ํƒ€์ž…์€ ๋ฉ”๋‰ดํŒ ํƒ€์ž…์„ ์•Œ๊ณ  ์žˆ์–ด์•ผ ์›ํ•˜๋Š” ์ปคํ”ผ๋ฅผ ์„ ํƒํ•  ์ˆ˜ ์žˆ๋‹ค.

 · ํ•œ ํƒ€์ž…์˜ ์ธ์Šคํ„ด์Šค๊ฐ€ ๋‹ค๋ฅธ ํƒ€์ž…์˜ ์ธ์Šคํ„ด์Šค๋ฅผ ํฌํ•จํ•˜์ง€๋Š” ์•Š์ง€๋งŒ ์„œ๋กœ ์•Œ๊ณ  ์žˆ์–ด์•ผ ํ•  ๊ฒฝ์šฐ ์ด๋ฅผ ์—ฐ๊ด€(association) ๊ด€๊ณ„๋ผ๊ณ  ํ•œ๋‹ค.

 

 

  ์†๋‹˜ ํƒ€์ž… - ๋ฐ”๋ฆฌ์Šคํƒ€ ํƒ€์ž…  

 · ์†๋‹˜ ํƒ€์ž…์€ ๋ฐ”๋ฆฌ์Šคํƒ€ ํƒ€์ž…์—๊ฒŒ ์ฃผ๋ฌธ์„ ํ•ด์•ผํ•œ๋‹ค. 

 

 

  ๋ฐ”๋ฆฌ์Šคํƒ€ ํƒ€์ž… - ๋ฉ”๋‰ดํŒ ํƒ€์ž…  

 · ๋ฐ”๋ฆฌ์Šคํƒ€ ํƒ€์ž…์€ ์ปคํ”ผ ํƒ€์ž…์„ ์•Œ๊ณ  ์žˆ์–ด์•ผ ํ•˜๊ณ , ์ปคํ”ผ๋ฅผ ์ œ์กฐํ•ด์•ผ ํ•œ๋‹ค.

 

 

์ปคํ”ผ ์ œ์กฐ์™€ ๊ด€๋ จ๋œ ๊ฐ์ฒด๋“ค์„ ํƒ€์ž…๊ณผ ๊ด€๊ณ„๋ฅผ ์ด์šฉํ•ด ์ถ”์ƒํ™”ํ•œ ์ผ์ข…์˜ ๋ชจ๋ธ์„ ์ž‘์„ฑํ–ˆ์œผ๋ฉฐ, ์ด์ฒ˜๋Ÿผ ์†Œํ”„ํŠธ์›จ์–ด๊ฐ€ ๋Œ€์ƒ์œผ๋กœ ํ•˜๋Š” ์˜์—ญ์ธ ๋„๋ฉ”์ธ์„ ๋‹จ์ˆœํ™”ํ•ด์„œ ํ‘œํ˜„ํ•œ ๋ชจ๋ธ์„ ๋„๋ฉ”์ธ ๋ชจ๋ธ์ด๋ผ๊ณ  ํ•œ๋‹ค.

 

์ด์ œ ์ ์ ˆํ•œ ๊ฐ์ฒด์—๊ฒŒ ์ ์ ˆํ•œ ์ฑ…์ž„์„ ํ• ๋‹นํ•˜์—ฌ ํ˜‘๋ ฅ์„ ์„ค๊ณ„ํ•ด ๋ณด์ž.

 

 ๐Ÿ“Œ  ์„ค๊ณ„ํ•˜๊ณ  ๊ตฌํ˜„ํ•˜๊ธฐ 

  1๏ธโƒฃ  ์ปคํ”ผ๋ฅผ ์ฃผ๋ฌธํ•˜๊ธฐ ์œ„ํ•œ ํ˜‘๋ ฅ ์ฐพ๊ธฐ  

๊ฐ์ฒด๊ฐ€ ๋ฉ”์‹œ์ง€๋ฅผ ์„ ํƒํ•˜๋Š” ๊ฒƒ์ด ์•„๋‹ˆ๋ผ ๋ฉ”์‹œ์ง€๊ฐ€ ๊ฐ์ฒด๋ฅผ ์„ ํƒํ•ด์•ผ ํ•œ๋‹ค.

→ ๋ฉ”์‹œ์ง€๋ฅผ ์ˆ˜์‹ ํ•  ๊ฐ์ฒด๋Š” ๋ฉ”์‹œ์ง€๋ฅผ ์ฒ˜๋ฆฌํ•  ์ฑ…์ž„์„ ๋งก๊ฒŒ ๋˜๊ณ  ๊ฐ์ฒด๊ฐ€ ์ˆ˜์‹ ํ•˜๋Š” ๋ฉ”์‹œ์ง€๋Š” ๊ฐ์ฒด๊ฐ€ ์™ธ๋ถ€์— ์ œ๊ณตํ•˜๋Š” ๊ณต์šฉ ์ธํ„ฐํŽ˜์ด์Šค์— ํฌํ•จ๋œ๋‹ค.

 

  '์ปคํ”ผ๋ฅผ ์ฃผ๋ฌธํ•˜๋ผ' 

 · ๋ฉ”์‹œ์ง€๋ฅผ ์ฒ˜๋ฆฌํ•  ๊ฐ์ฒด๋Š” ์†๋‹˜ ํƒ€์ž…์˜ ์ธ์Šคํ„ด์Šค์ด๋‹ค.

 · ์†๋‹˜ ๊ฐ์ฒด๊ฐ€ ์ปคํ”ผ๋ฅผ ์ฃผ๋ฌธํ•  ์ฑ…์ž„์„ ํ• ๋‹น ๋ฐ›๋Š”๋‹ค. (๋ฉ”์‹œ์ง€๋ฅผ ์„ ํƒํ•œ ๋‹ค์Œ ๊ฐ์ฒด๋ฅผ ์„ ํƒํ–ˆ๋‹ค.)

 

  '๋ฉ”๋‰ด ํ•ญ๋ชฉ์„ ์ฐพ์•„๋ผ' 

 · ์†๋‹˜์€ ๋ฉ”๋‰ด ํ•ญ๋ชฉ์— ๋Œ€ํ•ด์„œ๋Š” ์•Œ์ง€ ๋ชปํ•œ๋‹ค. ๋”ฐ๋ผ์„œ ๊ณ ๊ฐ์€ ๋ฉ”๋‰ด ํ•ญ๋ชฉ์„ ๋ˆ„๊ตฐ๊ฐ€๊ฐ€ ์ œ๊ณตํ•ด ์ค„ ๊ฒƒ์„ ์š”์ฒญํ•œ๋‹ค.

 · ๋ฉ”์‹œ์ง€์— '๋ฉ”๋‰ด ํ•ญ๋ชฉ'์ด๋ผ๋Š” ์ธ์ž๋ฅผ ํฌํ•จํ•ด ํ•จ๊ป˜ ์ „์†กํ•œ๋‹ค.

 · ๋ฉ”์‹œ์ง€๋ฅผ ์ˆ˜์‹ ํ•œ ๊ฐ์ฒด๋Š” '๋ฉ”๋‰ด ์ด๋ฆ„'์— ๋Œ€์‘๋˜๋Š” '๋ฉ”๋‰ด ํ•ญ๋ชฉ'์„ ๋ฐ˜ํ™˜ํ•ด์•ผ ํ•œ๋‹ค.

 · ๋ฉ”๋‰ด ํ•ญ๋ชฉ ๊ฐ์ฒด๋ฅผ ํฌํ•จํ•˜๋Š” ๋ฉ”๋‰ดํŒ ๊ฐ์ฒด๊ฐ€ ์ด ์ฑ…์ž„์„ ์ฒ˜๋ฆฌํ•  ์ˆ˜ ์žˆ๋Š” ๊ฐ€์žฅ ์ ์ ˆํ•œ ํ›„๋ณด์ด๋‹ค.

 

  '์ปคํ”ผ๋ฅผ ์ œ์กฐํ•˜๋ผ' 

 · ์†๋‹˜์€ ์ž์‹ ์ด ์ฃผ๋ฌธํ•œ ์ปคํ”ผ์— ๋Œ€ํ•œ ๋ฉ”๋‰ด ํ•ญ๋ชฉ์„ ์–ป์—ˆ์œผ๋‹ˆ ์ด์ œ ์ปคํ”ผ๋ฅผ ์ œ์กฐํ•ด ๋‹ฌ๋ผ๊ณ  ์š”์ฒญํ•  ์ˆ˜ ์žˆ๋‹ค.

 · ๋ฐ”๋ฆฌ์Šคํƒ€๋Š” ์ปคํ”ผ๋ฅผ ์ œ์กฐํ•˜๋Š” ๋ฐ ํ•„์š”ํ•œ ๋ชจ๋“  ์ •๋ณด๋ฅผ ์•Œ๊ณ  ์žˆ๋‹ค.

 · ๋ฐ”๋ฆฌ์Šคํƒ€๋Š” ์ปคํ”ผ๋ฅผ ๋งŒ๋“œ๋Š” ๋ฐ ํ•„์š”ํ•œ ์ •๋ณด์™€ ๊ธฐ์ˆ ์„ ๊ตฌ๋น„ํ•˜๊ณ  ์žˆ๋Š” ์ „๋ฌธ๊ฐ€์ด๋ฏ€๋กœ, ์ž์œจ์ ์ธ ๊ฐ์ฒด๋กœ์จ ์ปคํ”ผ๋ฅผ ์ œ์กฐํ•˜๋Š” ์ฑ…์ž„์„ ๊ฐ€์ง„๋‹ค.

 

์ด๋ ‡๊ฒŒ ํ˜‘๋ ฅ์— ํ•„์š”ํ•œ ๊ฐ์ฒด์˜ ์ข…๋ฅ˜์™€ ์ฑ…์ž„, ์ฃผ๊ณ ๋ฐ›์•„์•ผ ํ•˜๋Š” ๋ฉ”์‹œ์ง€์— ๋Œ€ํ•œ ๋Œ€๋žต์ ์ธ ์œค๊ณฝ์„ ์žก์•˜๋‹ค.

์ด์ œ ๋ฉ”์‹œ์ง€๋ฅผ ์ •์ œํ•จ์œผ๋กœ์จ ๊ฐ ๊ฐ์ฒด์˜ ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ๊ตฌํ˜„ ๊ฐ€๋Šฅํ•  ์ •๋„๋กœ ์ƒ์„ธํ•˜๊ฒŒ ์ •์ œํ•ด์•ผ ํ•œ๋‹ค.

  2๏ธโƒฃ  ์ธํ„ฐํŽ˜์ด์Šค ์ •๋ฆฌํ•˜๊ธฐ  

๊ฐ์ฒด๊ฐ€ ์ˆ˜์‹ ํ•œ ๋ฉ”์‹œ์ง€๊ฐ€ ๊ฐ์ฒด์˜ ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ๊ฒฐ์ •ํ•œ๋‹ค.

๋ฉ”์‹œ์ง€๊ฐ€ ๊ฐ์ฒด๋ฅผ ์„ ํƒํ–ˆ๊ณ , ์„ ํƒ๋œ ๊ฐ์ฒด๋Š” ๋ฉ”์‹œ์ง€๋ฅผ ์ž์‹ ์˜ ์ธํ„ฐํŽ˜์ด์Šค๋กœ ๋ฐ›์•„๋“ค์ธ๋‹ค.

 

  ์†๋‹˜ ๊ฐ์ฒด์˜ ์ธํ„ฐํŽ˜์ด์Šค  

 · '์ปคํ”ผ๋ฅผ ์ฃผ๋ฌธํ•˜๋ผ'๋ผ๋Š” ์˜คํผ๋ ˆ์ด์…˜์ด ํฌํ•จ๋˜์–ด์•ผ ํ•œ๋‹ค.

 

  ๋ฉ”๋‰ดํŒ ๊ฐ์ฒด์˜ ์ธํ„ฐํŽ˜์ด์Šค  

 · '๋ฉ”๋‰ด ํ•ญ๋ชฉ์„ ์ฐพ์•„๋ผ'๋ผ๋Š” ์˜คํผ๋ ˆ์ด์…˜์ด ์ œ๊ณตํ•ด์•ผ ํ•œ๋‹ค.

 

  ๋ฐ”๋ฆฌ์Šคํƒ€ ๊ฐ์ฒด์˜ ์ธํ„ฐํŽ˜์ด์Šค  

 · '์ปคํ”ผ๋ฅผ ์ œ์กฐํ•˜๋ผ'๋ผ๋Š” ์˜คํผ๋ ˆ์ด์…˜์ด ์ œ๊ณตํ•ด์•ผ ํ•œ๋‹ค.

 

  ์ปคํ”ผ ๊ฐ์ฒด์˜ ์ธํ„ฐํŽ˜์ด์Šค  

 · '์ƒ์„ฑํ•˜๋ผ'๋ผ๋Š” ์˜คํผ๋ ˆ์ด์…˜์ด ์ œ๊ณตํ•ด์•ผ ํ•œ๋‹ค.

 

๊ฐ์ฒด๋“ค์„ ํฌ๊ด„ํ•˜๋Š” ํƒ€์ž…์„ ์ •์˜ํ•œ ํ›„ ์‹๋ณ„๋œ ์˜คํผ๋ ˆ์ด์…˜์„ ํƒ€์ž…์˜ ์ธํ„ฐํŽ˜์ด์Šค์— ์ถ”๊ฐ€ํ•ด์•ผ ํ•œ๋‹ค.

→ ํ˜‘๋ ฅ์„ ํ†ตํ•ด ์‹๋ณ„๋œ ํƒ€์ž…์˜ ์˜คํผ๋ ˆ์ด์…˜์€ ์™ธ๋ถ€์—์„œ ์ ‘๊ทผ ๊ฐ€๋Šฅํ•œ ๊ณต์šฉ ์ธํ„ฐํŽ˜์ด์Šค์˜ ์ผ๋ถ€์ด๋‹ค.

→ ๋”ฐ๋ผ์„œ ์ธํ„ฐํŽ˜์ด์Šค์— ํฌํ•จ๋œ ์˜คํผ๋ ˆ์ด์…˜ ์—ญ์‹œ ์™ธ๋ถ€์—์„œ ์ ‘๊ทผ ๊ฐ€๋Šฅํ•˜๋„๋ก ๊ณต์šฉ(public)์œผ๋กœ ์„ ์–ธ๋˜์–ด ์žˆ์–ด์•ผ ํ•œ๋‹ค.

 

class Customer {
    public void order(String menuName) {}
}

class MenuItem {
}

class Menu {
    public MenuItem choose(String name) {}
}

class Barista {
    public Coffee makeCoffee(MenuItem menuItem) {}
}

class Coffee {
    public Coffee(MenuItem menuItem) {}
}

 

  3๏ธโƒฃ  ๊ตฌํ˜„ ํ•˜๊ธฐ  

ํด๋ž˜์Šค์˜ ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ์‹๋ณ„ํ–ˆ์œผ๋ฏ€๋กœ ์ด์ œ ์˜คํผ๋ ˆ์ด์…˜์„ ์ˆ˜ํ–‰ํ•˜๋Š” ๋ฐฉ๋ฒ•์„ ๋ฉ”์„œ๋“œ๋กœ ๊ตฌํ˜„ํ•ด๋ณด์ž.

  Customer  

 · Customer๋Š” Menu์—๊ฒŒ menuName์— ํ•ด๋‹นํ•˜๋Š” MenuItem์„ ์ฐพ์•„๋‹ฌ๋ผ๊ณ  ์š”์ฒญํ•ด์•ผ ํ•œ๋‹ค.

 · MenuItem์„ ๋ฐ›์•„ ์ด๋ฅผ Barista์—๊ฒŒ ์ „๋‹ฌํ•ด์„œ ์›ํ•˜๋Š” ์ปคํ”ผ๋ฅผ ์ œ์กฐํ•˜๋„๋ก ์š”์ฒญํ•ด์•ผ ํ•œ๋‹ค.

 · ๊ฐ์ฒด ์ฐธ์กฐ๋ฅผ ์–ป๋Š” ๋‹ค์–‘ํ•œ ๋ฐฉ๋ฒ•์ด ์žˆ์ง€๋งŒ ์—ฌ๊ธฐ์„œ๋Š” Customer์˜ order() ๋ฉ”์„œ๋“œ์˜ ์ธ์ž๋กœ Menu์™€ Barista ๊ฐ์ฒด๋ฅผ ์ „๋‹ฌ๋ฐ›๋Š” ๋ฐฉ๋ฒ•์œผ๋กœ ์ฐธ์กฐ ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•˜๊ธฐ๋กœ ํ•œ๋‹ค. 

 

class Customer {
    public void order(String menuName, Menu menu, Barista barista) {
        MenuItem menuItem = menu.choose(menuName);
        Coffee coffee = barista.makeCoffee(menuItem);
        ...
    }
}

 

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

 

  Menu  

 · Menu๋Š” menuName์— ํ•ด๋‹นํ•˜๋Š” MenuItem์„ ์ฐพ์•„์•ผ ํ•˜๋Š” ์ฑ…์ž„์ด ์žˆ๋‹ค.

 · Menu๊ฐ€ MenuItem์˜ ๋ชฉ๋ก์„ ํฌํ•จํ•ด์•ผ ํ•œ๋‹ค.

 · Menu์˜ choose() ๋ฉ”์„œ๋“œ๋Š” MenuItem์˜ ๋ชฉ๋ก์„ ํ•˜๋‚˜์”ฉ ๊ฒ€์‚ฌํ•ด๊ฐ€๋ฉด์„œ ์ด๋ฆ„์ด ๋™์ผํ•œ MenuItem์„ ์ฐพ์•„ ๋ฐ˜ํ™˜ํ•ด์•ผ ํ•œ๋‹ค.

 

class Menu {
    private List<MenuItem> items;
    
    public Menu(List<MenuItem> items) {
        this.items = items;
    }
    
    public MenuItem choose(String name) {
        for(MenuItem each : items) {
            if (each.getName().equals(name)) {
                return each;
            }
        }
        return null;
    }
}

 

 · MenuItem์˜ ๋ชฉ๋ก์„ Menu์˜ ์†์„ฑ์œผ๋กœ ํฌํ•จ์‹œํ‚จ ๊ฒฐ์ • ์—ญ์‹œ ํด๋ž˜์Šค๋ฅผ ๊ตฌํ˜„ํ•˜๋Š” ๋„์ค‘์— ๋‚ด๋ ค์กŒ๋‹ค.

  → ๊ฐ์ฒด์˜ ์†์„ฑ์€ ๊ฐ์ฒด์˜ ๋‚ด๋ถ€ ๊ตฌํ˜„์— ์†ํ•˜๊ธฐ ๋•Œ๋ฌธ์— ์บก์Аํ™”๋˜์–ด์•ผ ํ•œ๋‹ค.

  → ๊ฐ€์žฅ ํ›Œ๋ฅญํ•œ ๋ฐฉ๋ฒ•์€ ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ์ •ํ•˜๋Š” ๋‹จ๊ณ„์—์„œ๋Š” ๊ฐ์ฒด๊ฐ€ ์–ด๋–ค ์†์„ฑ์„ ๊ฐ€์ง€๋Š”์ง€, ๋˜ ๊ทธ ์†์„ฑ์ด ์–ด๋–ค ์ž๋ฃŒ ๊ตฌ์กฐ๋กœ ๊ตฌํ˜„๋๋Š”์ง€๋ฅผ ๊ณ ๋ คํ•˜์ง€ ์•Š๋Š” ๊ฒƒ์ด๋‹ค. 

  → ๊ฐ์ฒด๊ฐ€ ์–ด๋–ค ์ฑ…์ž„์„ ์ˆ˜ํ–‰ํ•ด์•ผ ํ•˜๋Š”์ง€๋ฅผ ๊ฒฐ์ •ํ•œ ํ›„์—์•ผ ์ฑ…์ž„์„ ์ˆ˜ํ–‰ํ•˜๋Š” ๋ฐ ํ•„์š”ํ•œ ๊ฐ์ฒด์˜ ์†์„ฑ์„ ๊ฒฐ์ •ํ•˜์ž.

 

  Barista  

 · Barista๋Š” MenuItem์„ ์ด์šฉํ•ด์„œ ์ปคํ”ผ๋ฅผ ์ œ์กฐํ•œ๋‹ค.

 

class Barista {
    public Coffee makeCoffee(MenuItem menuItem) {
        Coffee coffee = new Coffee(menuItem);
        return coffee;
    }
}

 

  Coffee  

 · Coffee๋Š” ์ž๊ธฐ ์ž์‹ ์„ ์ƒ์„ฑํ•˜๊ธฐ ์œ„ํ•œ ์ƒ์„ฑ์ž๋ฅผ ์ œ๊ณตํ•œ๋‹ค.

 · Coffee๋Š” ์ปคํ”ผ ์ด๋ฆ„๊ณผ ๊ฐ€๊ฒฉ์„ ์†์„ฑ์œผ๋กœ ๊ฐ€์ง€๊ณ  ์ƒ์„ฑ์ž ์•ˆ์—์„œ MenuItem์— ์š”์ฒญ์„ ๋ณด๋‚ด ์ปคํ”ผ ์ด๋ฆ„๊ณผ ๊ฐ€๊ฒฉ์„ ์–ป์€ ํ›„ Coffee์˜ ์†์„ฑ์„ ์ €์žฅํ•œ๋‹ค.

 

class Coffee {
    private String name;
    private int price;
    
    public Coffee(MenuItem menuItem) {
        this.name = menuItem.getName();
        this.price = menuItem.cost();
    }
}

 

  MenuItem  

 · MenuItem์€ getName() ๊ณผ cost() ๋ฉ”์‹œ์ง€์— ์‘๋‹ตํ•  ์ˆ˜ ์žˆ๋„๋ก ๋ฉ”์„œ๋“œ๋ฅผ ๊ตฌํ˜„ํ•ด์•ผ ํ•œ๋‹ค.

 

public class MenuItem {
    private String name;
    private int price;
    
    public MenuItem(String name, int price) {
        this.name = name;
        this.price = price;
    }
    
    public int cost() {
        return price;
    }
    
    public String getName() {
        return name;
    }
}

 

 · MenuItem์˜ ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ๊ตฌ์„ฑํ•˜๋Š” ์˜คํผ๋ ˆ์ด์…˜๋“ค์„ MenuItem์„ ๊ตฌํ˜„ํ•œ๋Š” ๋‹จ๊ณ„์—์„œ ์‹๋ณ„ํ–ˆ๋‹ค.

  → ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ํ†ตํ•ด ์‹ค์ œ๋กœ ์ƒํ˜ธ์ž‘์šฉ์„ ํ•ด๋ณด์ง€ ์•Š์€ ์ฑ„ ์ธํ„ฐํŽ˜์ด์Šค์˜ ๋ชจ์Šต์„ ์ •ํ™•ํ•˜๊ฒŒ ์˜ˆ์ธกํ•˜๋Š” ๊ฒƒ์€ ๋ถˆ๊ฐ€๋Šฅํ•˜๋‹ค.

  → ์„ค๊ณ„๋ฅผ ๊ฐ„๋‹จํžˆ ๋๋‚ด๊ณ  ์ตœ๋Œ€ํ•œ ๋นจ๋ฆฌ ๊ตฌํ˜„์— ๋Œ์ž…ํ•ด์•ผ ํ•œ๋‹ค.

  → ํ…Œ์ŠคํŠธ - ์ฃผ๋„ ์„ค๊ณ„๋กœ ์ฝ”๋“œ๋ฅผ ๊ตฌํ˜„ํ•˜๋Š” ์‚ฌ๋žŒ๋“ค์ด ์‹ค์ œ๋„ ์ฝ”๋“œ๋ฅผ ์ž‘์„ฑํ•ด๊ฐ€๋ฉด์„œ ํ˜‘๋ ฅ์˜ ์ „์ฒด์ ์ธ ๋ฐ‘๊ทธ๋ฆผ์„ ๊ทธ๋ฆฐ๋‹ค.

 

์ปคํ”ผ ์ „๋ฌธ์ ์„ ๊ตฌํ˜„ํ•œ ์ตœ์ข… ํด๋ž˜์Šค ๊ตฌ์กฐ

 

 

 ๐Ÿ‘Š ๊ฒฐ ๋ก  ๐Ÿ‘Š 

  ์ฝ”๋“œ๋Š” ์„ธ ๊ฐ€์ง€ ๊ด€์ ์„ ๋ชจ๋‘ ์ œ๊ณตํ•ด์•ผ ํ•œ๋‹ค.  

๊ฐœ๋… ๊ด€์ 

 · ๊ฐœ๋… ๊ด€์ ์—์„œ ์ฝ”๋“œ๋ฅผ ๋ฐ”๋ผ๋ณด๋ฉด Customer, Menu, MenuItem, Barista, Coffee ํด๋ž˜์Šค๋ฅผ ํ™•์ธํ•  ์ˆ˜ ์žˆ๋‹ค.

 · ์†Œํ”„ํŠธ์›จ์–ด ํด๋ž˜์Šค๊ฐ€ ๋„๋ฉ”์ธ ๊ฐœ๋…์˜ ํŠน์„ฑ์„ ์ตœ๋Œ€ํ•œ ์ˆ˜์šฉํ•˜๋ฉด ๋ณ€๊ฒฝ์„ ๊ด€๋ฆฌํ•˜๊ธฐ ์‰ฝ๊ณ  ์œ ์ง€๋ณด์ˆ˜์„ฑ์„ ํ–ฅ์ƒ์‹œํ‚ฌ ์ˆ˜ ์žˆ๋‹ค.

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

 

๋ช…์„ธ ๊ด€์ 

 · ๋ช…์„ธ ๊ด€์ ์€ ํด๋ž˜์Šค์˜ ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ๋ฐ”๋ผ๋ณธ๋‹ค.

 · ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ์ˆ˜์ •ํ•˜๋ฉด ํ•ด๋‹น ๊ฐ์ฒด์™€ ํ˜‘๋ ฅํ•˜๋Š” ๋ชจ๋“  ๊ฐ์ฒด์—๊ฒŒ ์˜ํ–ฅ์„ ๋ฏธ์น  ์ˆ˜๋ฐ–์— ์—†๋‹ค.

 · ์ตœ๋Œ€ํ•œ ๋ณ€ํ™”์— ์•ˆ์ •์ ์ธ ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ๋งŒ๋“ค๊ธฐ ์œ„ํ•ด์„œ๋Š” ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ํ†ตํ•ด ๊ตฌํ˜„๊ณผ ๊ด€๋ จ๋œ ์„ธ๋ถ€ ์‚ฌํ•ญ์ด ๋“œ๋Ÿฌ๋‚˜์ง€ ์•Š๊ฒŒ ํ•ด์•ผ ํ•œ๋‹ค.

 

๊ตฌํ˜„ ๊ด€์ 

 · ๊ตฌํ˜„ ๊ด€์ ์€ ํด๋ž˜์Šค์˜ ๋‚ด๋ถ€๋ฅผ ๋ฐ”๋ผ๋ณธ๋‹ค.

 · ๋ฉ”์„œ๋“œ์˜ ๊ตฌํ˜„๊ณผ ์†์„ฑ์˜ ๋ณ€๊ฒฝ์€ ์›์น™์ ์œผ๋กœ ์™ธ๋ถ€์˜ ๊ฐ์ฒด์—๊ฒŒ ์˜ํ–ฅ์„ ๋ฏธ์ณ์„œ๋Š” ์•ˆ ๋œ๋‹ค.

   → ๋ฉ”์„œ๋“œ์™€ ์†์„ฑ์ด ์ฒ ์ €ํ•˜๊ฒŒ ํด๋ž˜์Šค ๋‚ด๋ถ€๋กœ ์บก์Аํ™”๋˜์–ด์•ผ ํ•œ๋‹ค!

  ๋„๋ฉ”์ธ ๊ฐœ๋…์„ ์ฐธ์กฐํ•˜๋Š” ์ด์œ   

 · ์–ด๋–ค ๋ฉ”์‹œ์ง€๊ฐ€ ์žˆ์„ ๋•Œ ๊ทธ ๋ฉ”์‹œ์ง€๋ฅผ ์ˆ˜์‹ ํ•  ๊ฐ์ฒด๋ฅผ ์„ ํƒํ•˜๋Š” ์ฒซ ๋ฒˆ์งธ ์ „๋žต์€ ๋„๋ฉ”์ธ ๊ฐœ๋… ์ค‘์—์„œ ๊ฐ€์žฅ ์ ์ ˆํ•œ ๊ฒƒ์„ ์„ ํƒํ•˜๋Š” ๊ฒƒ์ด๋‹ค.

   → ๋„๋ฉ”์ธ ๊ฐœ๋… ์•ˆ์—์„œ ์ ์ ˆํ•œ ๊ฐ์ฒด๋ฅผ ์„ ํƒํ•˜๋Š” ๊ฒƒ์€ ๋„๋ฉ”์ธ์— ๋Œ€ํ•œ ์ง€์‹์„ ๊ธฐ๋ฐ˜์œผ๋กœ ์ฝ”๋“œ์˜ ๊ตฌ์กฐ์™€ ์˜๋ฏธ๋ฅผ ์‰ฝ๊ฒŒ ์œ ์ถ”ํ•  ์ˆ˜ ์žˆ๊ฒŒ ํ•œ๋‹ค.

      → ์œ ์ง€๋ณด์ˆ˜์„ฑ์— ํฐ ์˜ํ–ฅ์„ ๋ฏธ์นœ๋‹ค.

   → ์†Œํ”„ํŠธ์›จ์–ด ํด๋ž˜์Šค๊ฐ€ ๋„๋ฉ”์ธ ๊ฐœ๋…์„ ๋”ฐ๋ฅด๋ฉด ๋ณ€ํ™”์— ์‰ฝ๊ฒŒ ๋Œ€์‘ํ•  ์ˆ˜ ์žˆ๋‹ค.

  ์ธํ„ฐํŽ˜์ด์Šค์™€ ๊ตฌํ˜„์„ ๋ถ„๋ฆฌํ•˜๋ผ  

 · ๋ช…์„ธ ๊ด€์ ์€ ํด๋ž˜์Šค์˜ ์•ˆ์ •์ ์ธ ์ธก๋ฉด์„ ๋“œ๋Ÿฌ๋‚ด์•ผ ํ•˜๊ณ , ๊ตฌํ˜„ ๊ด€์ ์€ ๋ถˆ์•ˆ์ •ํ•œ ์ธก๋ฉด์„ ๋“œ๋Ÿฌ๋‚ด์•ผ ํ•œ๋‹ค.

   → ์ธํ„ฐํŽ˜์ด์Šค๊ฐ€ ๊ตฌํ˜„ ์„ธ๋ถ€ ์‚ฌํ•ญ์„ ๋…ธ์ถœํ•˜๊ธฐ ์‹œ์ž‘ํ•˜๋ฉด ์•„์ฃผ ์ž‘์€ ๋ณ€๋™์—๋„ ์ „์ฒด ํ˜‘๋ ฅ์ด ์š”๋™์น˜๋Š” ์ทจ์•ฝํ•œ ์„ค๊ณ„๋ฅผ ์–ป์„ ์ˆ˜๋ฐ–์— ์—†๋‹ค.

 · ํด๋ž˜์Šค๋ฅผ ๋ดค์„ ๋•Œ ํด๋ž˜์Šค์˜ ๋ช…์„ธ ๊ด€์ ๊ณผ ๊ตฌํ˜„ ๊ด€์ ์œผ๋กœ ๋‚˜๋ˆ ๋ณผ ์ˆ˜ ์žˆ์–ด์•ผ ํ•œ๋‹ค.

   → ์บก์Аํ™”๋ฅผ ์œ„๋ฐ˜ํ•ด์„œ ๊ตฌํ˜„์„ ์ธํ„ฐํŽ˜์ด์Šค ๋ฐ–์œผ๋กœ ๋…ธ์ถœํ•ด์„œ๋„ ์•ˆ ๋˜๊ณ ,

   → ์ธํ„ฐํŽ˜์ด์Šค์™€ ๊ตฌํ˜„์„ ๋ช…ํ™•ํ•˜๊ฒŒ ๋ถ„๋ฆฌํ•˜์ง€ ์•Š๊ณ  ํ๋ฆฟํ•˜๊ฒŒ ์„ž์–ด๋†“์•„์„œ๋Š” ์•ˆ ๋œ๋‹ค.

 

๐Ÿ“ ์„ธ ๊ฐ€์ง€ ๊ด€์  ๋ชจ๋‘์—์„œ ํด๋ž˜์Šค๋ฅผ ๋ฐ”๋ผ๋ณผ ์ˆ˜ ์žˆ์œผ๋ ค๋ฉด ํ›Œ๋ฅญํ•œ ์„ค๊ณ„๊ฐ€ ๋’ท๋ฐ›์นจ๋ผ์•ผ ํ•˜๋Š” ๊ฒƒ์ด๋‹ค.