๐ŸŽ‰ berenickt ๋ธ”๋กœ๊ทธ์— ์˜จ ๊ฑธ ํ™˜์˜ํ•ฉ๋‹ˆ๋‹ค. ๐ŸŽ‰
CS
๋””์ž์ธ ํŒจํ„ด
01-OOP

1. OOP์˜ ๊ธฐ์ดˆ

  • OOP๋ผ๊ณ ๋„ ๋ถˆ๋ฆฌ๋Š” ๊ฐ์ฒด ์ง€ํ–ฅ ํ”„๋กœ๊ทธ๋ž˜๋ฐ(Object Oriented Programing)
  • ๋ฐ์ดํ„ฐ ์กฐ๊ฐ๋“ค ๋ฐ ํ•ด๋‹น ๋ฐ์ดํ„ฐ์™€ ๊ด€๋ จ๋œ ํ–‰๋™๋“ค์„ ๊ฐ์ฒด๋ผ๋Š” ํŠน์ˆ˜ํ•œ ๋ฌถ์Œ์œผ๋กœ ๋ชจ์€๋‹ค๋Š” ๊ฐœ๋…์— ๊ธฐ๋ฐ˜ํ•œ ์ด๋ก ์ ์ธ ํ‹€ ๋˜๋Š” ์ฒด๊ณ„
  • ๊ฐ์ฒด๋“ค์€ ํด๋ž˜์Šค๋ผ๊ณ  ํ•˜๋Š” ํ”„๋กœ๊ทธ๋ž˜๋จธ๊ฐ€ ์ •์˜ํ•œ โ€˜์ฒญ์‚ฌ์ง„โ€™๋“ค์˜ ์ง‘ํ•ฉ์œผ๋กœ ๊ตฌ์„ฑ๋ฉ๋‹ˆ๋‹ค.

1.1 ๊ฐ์ฒด๋“ค, ํด๋ž˜์Šค๋“ค

๊ณ ์–‘์ด ์ข‹์•„ํ•˜์‹œ๋‚˜์š”? ๋‹ค์–‘ํ•œ ๊ณ ์–‘์ด ์˜ˆ์‹œ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ OOP๋ผ๋Š” ๊ฐœ๋…์„ ์„ค๋ช…ํ•ด ๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค

design-patterns-ts-1-1

์˜ค์Šค์นด๋ผ๋Š” ๊ณ ์–‘์ด๊ฐ€ ์žˆ๋‹ค๊ณ  ๊ฐ€์ •ํ•ด ๋ด…์‹œ๋‹ค. ์˜ค์Šค์นด๋Š” ๊ฐ์ฒด์ด๋ฉฐ, Cat (๊ณ ์–‘์ด) ํด๋ž˜์Šค์˜ ์ธ์Šคํ„ด์Šค์ž…๋‹ˆ๋‹ค. ๊ฐ ๊ณ ์–‘์ด๋Š” ์ด๋ฆ„, ์„ฑ๋ณ„, ๋‚˜์ด, ์ฒด์ค‘, ์ƒ‰๊น”, ์ข‹์•„ํ•˜๋Š” ์Œ์‹ ๊ฐ™์€ ์ผ๋ฐ˜์ ์ธ ์†์„ฑ๋“ค์„ ๋งŽ์ด ๊ฐ–๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. ์ด๋Ÿฌํ•œ ์†์„ฑ๋“ค์„ ํด๋ž˜์Šค์˜ ํ•„๋“œ๋“ค์ด๋ผ๊ณ  ํ•ฉ๋‹ˆ๋‹ค

์ด ์ฑ…์—์„œ ์ €๋Š” ํด๋ž˜์Šค ์ด๋ฆ„์„ UML ๋‹ค์ด์–ด๊ทธ๋žจ์ด๋‚˜ ์ฝ”๋“œ์— ์“ฐ์ธ ๊ฒƒ์ฒ˜๋Ÿผ ์˜์–ด๋กœ ์–ธ๊ธ‰ํ•  ๊ฒ๋‹ˆ๋‹ค. ํ•˜์ง€๋งŒ ๋•Œ๋กœ๋Š” ๊ธ€์ด ๋Œ€ํ™”์ฒ˜๋Ÿผ ์ฝํž ์ˆ˜ ์žˆ๊ฒŒ ํด๋ž˜์Šค ์ด๋ฆ„์„ ํ•œ๊ตญ์–ด๋กœ ๋ฒˆ์—ญํ•˜์—ฌ ์–ธ๊ธ‰ํ•  ์ˆ˜๋„ ์žˆ์œผ๋‹ˆ ์œ ๋…ํ•ด ์ฃผ์„ธ์š”.

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

๊ฐ์ฒด์˜ ํ•„๋“œ๋“ค์˜ ๋‚ด๋ถ€์— ์ €์žฅ๋œ ๋ฐ์ดํ„ฐ๋Š” ์ข…์ข… ์ƒํƒœ๋ผ๊ณ  ๋ถˆ๋ฆฌ๋ฉฐ, ๊ฐ์ฒด์˜ ๋ชจ๋“  ๋ฉ”์„œ๋“œ๋“ค์€ ๊ฐ์ฒด์˜ ํ–‰๋™๋“ค์„ ์ •์˜ํ•ฉ๋‹ˆ๋‹ค.

๋‹น์‹ ์˜ ์นœ๊ตฌ์˜ ๊ณ ์–‘์ด์ธ ๋ฃจ๋‚˜ ์—ญ์‹œ Cat (๊ณ ์–‘์ด) ํด๋ž˜์Šค์˜ ์ธ์Šคํ„ด์Šค์ž…๋‹ˆ๋‹ค. ๋ฃจ๋‚˜๋Š” ์˜ค์Šค์นด์™€ ๊ฐ™์€ ์†์„ฑ์˜ ์ง‘ํ•ฉ์„ ๊ฐ€์ง€๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. ์ด ๋‘˜์˜ ์ฐจ์ด์ ์€ ๊ทธ๋“ค์ด ๊ฐ€์ง„ ์ด๋Ÿฌํ•œ ์†์„ฑ๋“ค์˜ ๊ฐ’์ด ๋‹ค๋ฅด๋‹ค๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด, ๋ฃจ๋‚˜์˜ ์„ฑ๋ณ„์€ ์—ฌ์„ฑ์ด๊ณ  ์ƒ‰๊น”์ด ๋‹ค๋ฅด๋ฉฐ ์˜ค์Šค์นด๋ณด๋‹ค ๋ชธ๋ฌด๊ฒŒ๊ฐ€ ์ ์Šต๋‹ˆ๋‹ค.

design-patterns-ts-1-2

๋”ฐ๋ผ์„œ ํด๋ž˜์Šค๋Š” ๊ฐ์ฒด๋“ค์˜ ๊ตฌ์กฐ๋ฅผ ์ •์˜ํ•˜๋Š” ์ฒญ์‚ฌ์ง„๊ณผ ๋น„์Šทํ•˜๋ฉฐ, ๊ฐ์ฒด๋“ค์€ ์ด ํด๋ž˜์Šค์˜ ๊ตฌ์ƒ ์ธ์Šคํ„ด์Šค๋“ค์ž…๋‹ˆ๋‹ค


1.2 ํด๋ž˜์Šค ๊ณ„์ธต๊ตฌ์กฐ๋“ค

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

์ด์›ƒ์— ์ด๋ฆ„์ด โ€˜ํŒŒ์ด๋„โ€™์ธ ๊ฐœ๊ฐ€ ์žˆ๋‹ค๊ณ  ๊ฐ€์ •ํ•ด ๋ด…์‹œ๋‹ค. ๊ฐœ์™€ ๊ณ ์–‘์ด๋Š” ๊ณตํ†ต์ ์ด ๋งŽ์Šต๋‹ˆ๋‹ค. ์ด๋ฆ„, ์„ฑ๋ณ„, ๋‚˜์ด, ์ƒ‰๊น”์€ ๊ฐœ์™€ ๊ณ ์–‘์ด ๋ชจ๋‘์˜ ์†์„ฑ์ž…๋‹ˆ๋‹ค. ๊ฐœ๋Š” ๊ณ ์–‘์ด์ฒ˜๋Ÿผ ์ˆจ์„ ์‰ฌ๊ณ , ์ž ์„ ์ž๊ณ , ๋‹ฌ๋ฆด ์ˆ˜๋„ ์žˆ์Šต๋‹ˆ๋‹ค. ๊ทธ๋ ‡๊ฒŒ ์šฐ๋ฆฌ๋„ ๊ธฐ์ดˆ Animal (๋™๋ฌผ) ํด๋ž˜์Šค๋ฅผ ์ •์˜ํ•œ ๋’ค ๋™๋ฌผ๋“ค์˜ ์ผ๋ฐ˜์ ์ธ ์†์„ฑ๊ณผ ํ–‰๋™์„ ๋‚˜์—ดํ•  ์ˆ˜ ์žˆ์„ ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค.

design-patterns-ts-1-3

๋ฐฉ๊ธˆ ์ •์˜ํ•œ ๊ฒƒ๊ณผ ๊ฐ™์€ ์ƒ์œ„ ํด๋ž˜์Šค๋ฅผ ๋ถ€๋ชจ ํด๋ž˜์Šค๋ผ๊ณ  ํ•ฉ๋‹ˆ๋‹ค. ๊ทธ ํ•˜์œ„์— ์žˆ๋Š” ํด๋ž˜์Šค๋“ค์„ ์ž์‹ ํด๋ž˜์Šค๋“ค์ด๋ผ๊ณ  ํ•ฉ๋‹ˆ๋‹ค. ์ž์‹ ํด๋ž˜์Šค๋“ค์€ ๋ถ€๋ชจ๋กœ๋ถ€ํ„ฐ ์ƒํƒœ์™€ ํ–‰๋™๋“ค์„ ์ƒ์†๋ฐ›๊ณ , ๊ทธ์ค‘์—์„œ ๋ถ€๋ชจ์™€ ๋ฌด์–ธ๊ฐ€ ๋‹ค๋ฅธ ๊ฒƒ๋“ค๋งŒ์„ ์ •์˜ํ•ฉ๋‹ˆ๋‹ค. ๊ทธ๋ž˜์„œ Cat (๊ณ ์–‘์ด) ํด๋ž˜์Šค์—๋Š” meow (์•ผ์˜น) ๋ฉ”์„œ๋“œ๊ฐ€ ์žˆ๊ณ , Dog (๊ฐ•์•„์ง€) ํด๋ž˜์Šค์—๋Š” bark (๋ฉ๋ฉ ์ง–๋Š”) ๋ฉ”์„œ๋“œ๊ฐ€ ์žˆ๊ฒŒ ๋ฉ๋‹ˆ๋‹ค.

์—ฐ๊ด€๋œ ๋น„์ฆˆ๋‹ˆ์Šค ์š”๊ตฌ์‚ฌํ•ญ์ด ์žˆ๋‹ค๋ฉด, ์—ฌ๊ธฐ์„œ ๋” ๋‚˜์•„๊ฐ€ Organisms (๋ชจ๋“  ์ƒ๋ช…์ฒด๋“ค)๋ผ๋Š” ๋”์šฑ ์ผ๋ฐ˜์ ์ธ ํด๋ž˜์Šค๋ฅผ ์ถ”์ถœํ•  ์ˆ˜๋„ ์žˆ์Šต๋‹ˆ๋‹ค. ์ด ํด๋ž˜์Šค๋Š” Animals (๋™๋ฌผ๋“ค) ๋ฐ Plants (์‹๋ฌผ๋“ค)์— ๋Œ€ํ•œ ๋ถ€๋ชจ ํด๋ž˜์Šค๊ฐ€ ๋  ๊ฒƒ์ž…๋‹ˆ๋‹ค. ์ด๋Ÿฐ ํด๋ž˜์Šค๋“ค์˜ ํ”ผ๋ผ๋ฏธ๋“œ๊ฐ€ ๋ฐ”๋กœ ๊ณ„์ธต๊ตฌ์กฐ์ž…๋‹ˆ๋‹ค. ์ด๋Ÿฌํ•œ ๊ณ„์ธต๊ตฌ์กฐ์—์„œ Cat (๊ณ ์–‘์ด) ํด๋ž˜์Šค๋Š” Animal (๋™๋ฌผ)๊ณผ Organism (์ƒ๋ช…์ฒด) ํด๋ž˜์Šค ์–‘์ชฝ์˜ ๋ชจ๋“  ๋‚ด์šฉ์„ ์ƒ์†๋ฐ›์Šต๋‹ˆ๋‹ค.

design-patterns-ts-1-4

์ž์‹ ํด๋ž˜์Šค๋“ค์€ ๋ถ€๋ชจ ํด๋ž˜์Šค๋“ค์—์„œ ์ƒ์†ํ•œ ๋ฉ”์„œ๋“œ๋“ค์˜ ํ–‰๋™์„ ์˜ค๋ฒ„๋ผ์ด๋“œํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๋˜ ์ž์‹ ํด๋ž˜์Šค๋“ค์€ ๋””ํดํŠธ ํ–‰๋™๋“ค์„ ์™„์ „ํžˆ ๋Œ€์ฒดํ•˜๊ฑฐ๋‚˜ ๋ช‡ ๊ฐ€์ง€ ํ–‰๋™๋“ค์„ ์ถ”๊ฐ€ํ•˜์—ฌ ๊ทธ ๊ธฐ๋Šฅ๋“ค์„ ํ–ฅ์ƒ์‹œํ‚ฌ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.


2. OOP์˜ ๊ธฐ๋‘ฅ๋“ค

๊ฐ์ฒด ์ง€ํ–ฅ ํ”„๋กœ๊ทธ๋ž˜๋ฐ(OOP)์€ OOP๋ฅผ ๋‹ค๋ฅธ ํ”„๋กœ๊ทธ๋ž˜๋ฐ ํ‹€ ๋˜๋Š” ์ฒด๊ณ„๋“ค๊ณผ ์ฐจ๋ณ„ํ™”ํ•˜๋Š” 4๊ฐ€์ง€ ๊ธฐ๋‘ฅ, ์ฆ‰ ๊ธฐ๋ณธ ๊ฐœ๋…๋“ค์„ ๊ธฐ๋ฐ˜์œผ๋กœ ํ•ฉ๋‹ˆ๋‹ค.

design-patterns-ts-1-5


2.1 ์ถ”์ƒํ™”

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

์˜ˆ๋ฅผ ๋“ค์–ด Airplane (๋น„ํ–‰๊ธฐ) ํด๋ž˜์Šค๋Š” ๋น„ํ–‰ ์‹œ๋ฎฌ๋ ˆ์ดํ„ฐ์™€ ํ•ญ๊ณต ์ขŒ์„ ์˜ˆ์•ฝ ์•ฑ ๋ชจ๋‘์— ์กด์žฌํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ ๋น„ํ–‰์‹œ๋ฎฌ๋ ˆ์ดํ„ฐ๊ฐ€ ์‹ค์ œ ๋น„ํ–‰๊ณผ ๊ด€๋ จ๋œ ์„ธ๋ถ€ ์ •๋ณด๋“ค์„ ๋‹ด๊ณ  ์žˆ๋‹ค๋ฉด, ํ•ญ๊ณต ์ขŒ์„ ์˜ˆ์•ฝ ์•ฑ์—์„œ ์‚ฌ๋žŒ๋“ค์ด ์‹ ๊ฒฝ์“ฐ๋Š” ๊ฑด ์ขŒ์„ ๋ฐฐ์น˜๋„์™€ ์˜ˆ์•ฝ ๊ฐ€๋Šฅํ•œ ์ขŒ์„๋“ค ๊ฐ™์€ ์ •๋ณด๋“ค๋ฟ์ž…๋‹ˆ๋‹ค

design-patterns-ts-1-6

์ถ”์ƒํ™”๋Š” ๋งฅ๋ฝ์— ๋”ฐ๋ผ ํ•ต์‹ฌ์ ์ธ ๊ฐœ๋… ๋˜๋Š” ๊ธฐ๋Šฅ๋“ค๋กœ ์ œํ•œ๋˜๋Š” ์‹ค์ œ ๊ฐ์ฒด ๋˜๋Š” ํ˜„์ƒ์˜ ๋ชจ๋ธ์ด๋ฉฐ, ์ด ๋งฅ๋ฝ๊ณผ ๊ด€๋ จ๋œ ๋ชจ๋“  ์„ธ๋ถ€ ์ •๋ณด๋Š” ๋†’์€ ์ •ํ™•๋„๋กœ ๋‚˜ํƒ€๋‚ด๊ณ  ๋‚˜๋จธ์ง€๋Š” ๋ชจ๋‘ ์ƒ๋žตํ•ฉ๋‹ˆ๋‹ค


2.2 ์บก์Аํ™”

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

์™œ๋ƒํ•˜๋ฉด ์ด๋Ÿฌํ•œ ์„ธ์„ธํ•œ ์ž‘์—…๋“ค์€ ์ž๋™์ฐจ์˜ ํ›„๋“œ ์•„๋ž˜์— ์ˆจ๊ฒจ์ ธ ์žˆ๊ธฐ ๋•Œ๋ฌธ์ž…๋‹ˆ๋‹ค. ์šด์ „์ž์—๊ฒŒ ์žˆ๋Š” ๊ฑด ์‹œ๋™ ์Šค์œ„์น˜, ํ•ธ๋“ค, ๊ทธ๋ฆฌ๊ณ  ๋ช‡ ๊ฐœ์˜ ํŽ˜๋‹ฌ์ด๋ผ๋Š” ๋‹จ์ˆœํ•œ ์ธํ„ฐํŽ˜์ด์Šค๊ฐ€ ์ „๋ถ€์ž…๋‹ˆ๋‹ค. ์ด๊ฒƒ์€ ๊ฐ ๊ฐ์ฒด๊ฐ€ ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ๊ฐ–๋Š” ๋ฐฉ์‹์„ ์„ค๋ช…ํ•ด์ค๋‹ˆ๋‹ค. ์ธํ„ฐํŽ˜์ด์Šค๋Š” ๋‹ค๋ฅธ ๊ฐ์ฒด์™€ ์ƒํ˜ธ์ž‘์šฉํ•  ์ˆ˜ ์žˆ๋Š” ๊ฐ์ฒด์˜ ๊ณต๊ฐœ๋œ ๋ถ€๋ถ„์ž…๋‹ˆ๋‹ค.

์บก์Аํ™”๋Š” ๊ฐ์ฒด๊ฐ€ ๊ทธ ์ƒํƒœ์™€ ํ–‰๋™์˜ ์ผ๋ถ€๋ฅผ ๋‹ค๋ฅธ ๊ฐ์ฒด๋“ค๋กœ๋ถ€ํ„ฐ ์ˆจ๊ธฐ๊ณ , ๋‚˜๋จธ์ง€ ํ”„๋กœ๊ทธ๋žจ์—๋Š” ์ œํ•œ๋œ ์ธํ„ฐํŽ˜์ด์Šค๋งŒ ๋…ธ์ถœํ•  ์ˆ˜ ์žˆ๋Š” ๊ธฐ๋Šฅ์ž…๋‹ˆ๋‹ค.

๋ฌด์–ธ๊ฐ€๋ฅผ ์บก์Аํ™”ํ•œ๋‹ค๋Š” ๊ฒƒ์€ ๊ทธ๊ฒƒ์„ private (๋น„๊ณต๊ฐœ)๋กœ ๋งŒ๋“ ๋‹ค๋Š” ๋œป์œผ๋กœ, ๊ทธ๋Ÿฌ๋ฉด ๊ทธ ๋ฌด์–ธ๊ฐ€๋ฅผ ์ž์‹ ์˜ ํด๋ž˜์Šค์˜ ๋ฉ”์„œ๋“œ ๋‚ด์—์„œ๋งŒ ์ ‘๊ทผํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์กฐ๊ธˆ ๋œ ์ œํ•œ์ ์ธ protected (๋ณดํ˜ธ๋œ) ์ ‘๊ทผ์ œํ•œ์ž๋ผ๋Š” ๊ฒƒ๋„ ์žˆ๋Š”๋ฐ, ์ด๊ฒƒ์€ ํด๋ž˜์Šค์˜ ๋ฉค๋ฒ„๋ฅผ ์ž์‹ ํด๋ž˜์Šค๋“ค์—์„œ๋„ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๊ฒŒ ํ•ด์ค๋‹ˆ๋‹ค.

๋Œ€๋ถ€๋ถ„์˜ ํ”„๋กœ๊ทธ๋ž˜๋ฐ ์–ธ์–ด์˜ ์ธํ„ฐํŽ˜์ด์Šค๋“ค, ์ถ”์ƒ ํด๋ž˜์Šค๋“ค, ๊ทธ๋ฆฌ๊ณ  ์ถ”์ƒ ๋ฉ”์„œ๋“œ๋“ค์€ ์ถ”์ƒํ™” ๋ฐ ์บก์Аํ™” ๊ฐœ๋…๋“ค์— ๊ธฐ๋ฐ˜์„ ๋‘ก๋‹ˆ๋‹ค. ํ˜„๋Œ€ OOP ์–ธ์–ด๋“ค์—์„œ์˜ ์ธํ„ฐํŽ˜์ด์Šค ๋ฉ”์ปค๋‹ˆ์ฆ˜ (์ผ๋ฐ˜์ ์œผ๋กœ interface ๋˜๋Š” protocol ํ‚ค์›Œ๋“œ๋กœ ์„ ์–ธ๋จ)์€ ๊ฐ์ฒด ๊ฐ„์˜ ์ƒํ˜ธ ์ž‘์šฉ์— ๋Œ€ํ•œ ๊ณ„์•ฝ์„ ์ •์˜ํ•  ์ˆ˜ ์žˆ๋„๋ก ํ•ฉ๋‹ˆ๋‹ค. ์ด๋Š” ์ธํ„ฐํŽ˜์ด์Šค๋“ค์ด ๊ฐ์ฒด๋“ค์˜ ํ–‰๋™์—๋งŒ ๊ด€์‹ฌ์„ ๋‘๋Š” ์ด์œ  ์ค‘ ํ•˜๋‚˜์ด์ž, ๋‹น์‹ ์ด ์ธํ„ฐํŽ˜์ด์Šค์—์„œ ํ•„๋“œ๋ฅผ ์„ ์–ธํ•  ์ˆ˜ ์—†๋Š” ์ด์œ ์ž…๋‹ˆ๋‹ค.

์ธํ„ฐํŽ˜์ด์Šค๋ผ๋Š” ๋‹จ์–ด๋Š” ๊ฐ์ฒด์˜ ๊ณต๊ฐœ๋œ ๋ถ€๋ถ„์„ ๋‚˜ํƒ€๋ƒ…๋‹ˆ๋‹ค. ๋™์‹œ์— ๋Œ€๋ถ€๋ถ„์˜ ํ”„๋กœ๊ทธ๋ž˜๋ฐ ์–ธ์–ด์—๋Š” interface ๋ผ๋Š” ์œ ํ˜•๋„ ์žˆ์ง€์š”. ์ด ์‚ฌ์‹ค์ด ๋งค์šฐ ํ˜ผ๋ž€์Šค๋Ÿฝ๋‹ค๋Š” ์‚ฌ์‹ค์„ ์ €๋Š” ์ž˜ ์ดํ•ดํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค.

design-patterns-ts-1-7

fly(origin, destination, passengers) ((์ถœ๋ฐœ์ง€, ๋ชฉ์ ์ง€, ์Šน๊ฐ)์„ ์ธ์ˆ˜๋กœ ๋ฐ›๋Š” ๋น„ํ–‰) ๋ฉ”์„œ๋“œ๊ฐ€ ์žˆ๋Š” FlyingTransport (๋น„ํ–‰ ์šด์†ก ์ˆ˜๋‹จ) ์ธํ„ฐํŽ˜์ด์Šค๊ฐ€ ์žˆ๋‹ค๊ณ  ๊ฐ€์ •ํ•ด ๋ด…์‹œ๋‹ค.

ํ•ญ๊ณต ์šด์†ก ์‹œ๋ฎฌ๋ ˆ์ดํ„ฐ๋ฅผ ์„ค๊ณ„ํ•  ๋•Œ,

  • ๋‹น์‹ ์€ Airport (๊ณตํ•ญ) ํด๋ž˜์Šค๋ฅผ FlyingTransport ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ๊ตฌํ˜„ํ•˜๋Š” ๊ฐ์ฒด๋“ค๊ณผ๋งŒ ์ž‘๋™ํ•˜๋„๋ก ์ œํ•œํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
  • ์ด๋ ‡๊ฒŒ ๋งŒ๋“ค๊ณ  ๋‚˜๋ฉด airplane (๋น„ํ–‰๊ธฐ)์ด๋“ , Helicopter (ํ—ฌ๋ฆฌ์ฝฅํ„ฐ)๋“ , ์•„๋‹ˆ๋ฉด DomesticatedGryphon (์ง‘์—์„œ ํ‚ค์šด ๋…์ˆ˜๋ฆฌ์‚ฌ์ž)์ด๋“ ,
  • ๊ณตํ•ญ ๊ฐ์ฒด์— ์ „๋‹ฌ๋œ ์–ด๋–ค ๊ฐ์ฒด๋ผ๋„ ์ด๋Ÿฌํ•œ ์œ ํ˜•์˜ ๊ณตํ•ญ์—์„œ ์ด์ฐฉ๋ฅ™ํ•  ์ˆ˜ ์žˆ์„ ๊ฑฐ๋ผ๊ณ  ํ™•์‹ ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๋˜ ๋‹น์‹ ์€ ์ด๋Ÿฌํ•œ ํด๋ž˜์Šค๋“ค์˜ fly ๋ฉ”์„œ๋“œ์— ๋Œ€ํ•œ ๊ตฌํ˜„์„ ์›ํ•˜๋Š” ๋ฐฉ์‹์œผ๋กœ ๋ณ€๊ฒฝํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๋ฉ”์„œ๋“œ์˜ ์‹œ๊ทธ๋‹ˆ์ฒ˜๋“ค์ด ์ธํ„ฐํŽ˜์ด์Šค์— ์„ ์–ธ๋œ ๊ฒƒ๋“ค๊ณผ ๊ฐ™๊ฒŒ ์œ ์ง€๋˜๋Š” ํ•œ Airport ํด๋ž˜์Šค์˜ ๋ชจ๋“  ์ธ์Šคํ„ด์Šค๋Š” ๋‹น์‹ ์˜ ๋น„ํ–‰ ๊ฐ์ฒด๋“ค๊ณผ ์ž˜ ์ž‘๋™ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.


2.3 ์ƒ์†

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

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

design-patterns-ts-1-8

๋Œ€๋ถ€๋ถ„์˜ ํ”„๋กœ๊ทธ๋ž˜๋ฐ ์–ธ์–ด์—์„œ ์ž์‹ ํด๋ž˜์Šค๋Š” ํ•˜๋‚˜์˜ ๋ถ€๋ชจ ํด๋ž˜์Šค๋งŒ ํ™•์žฅํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๋ฐ˜๋ฉด์— ๋ชจ๋“  ํด๋ž˜์Šค๊ฐ€ ๋™์‹œ์— ์—ฌ๋Ÿฌ ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ๊ตฌํ˜„ํ•  ์ˆ˜ ์žˆ์ฃ . ํ•˜์ง€๋งŒ ์•ž์„œ ์–ธ๊ธ‰ํ–ˆ๋“ฏ์ด ๋ถ€๋ชจ ํด๋ž˜์Šค๊ฐ€ ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ๊ตฌํ˜„ํ•œ๋‹ค๋ฉด ๋ชจ๋“  ์ž์‹ ํด๋ž˜์Šค๋“ค ๋˜ํ•œ ๊ทธ ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ๊ตฌํ˜„ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.


2.4 ๋‹คํ˜•์„ฑ

์ด์ œ ๋™๋ฌผ์— ๋Œ€ํ•œ ์˜ˆ์‹œ๋ฅผ ์‚ดํŽด๋ด…์‹œ๋‹ค. ๋Œ€๋ถ€๋ถ„์˜ Animals (๋™๋ฌผ๋“ค)๋Š” ์†Œ๋ฆฌ๋ฅผ ๋‚ผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๋”ฐ๋ผ์„œ ์šฐ๋ฆฌ๋Š” ๋ชจ๋“  ์ž์‹ ํด๋ž˜์Šค๋“ค์ด ๊ธฐ์ดˆ makeSound (์†Œ๋ฆฌ๋‚ด๊ธฐ) ๋ฉ”์„œ๋“œ๋ฅผ ์˜ค๋ฒ„๋ผ์ด๋“œํ•ด์•ผ ๊ฐ ์ž์‹ ํด๋ž˜์Šค๊ฐ€ ๊ทธ์— ํ•ด๋‹นํ•˜๋Š” ๋™๋ฌผ์˜ ์†Œ๋ฆฌ๋ฅผ ์˜ฌ๋ฐ”๋ฅด๊ฒŒ ๋‚ผ ์ˆ˜ ์žˆ๋‹ค๊ณ  ์˜ˆ์ƒํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๊ทธ๋Ÿฌ๋ฏ€๋กœ ์šฐ๋ฆฌ๋Š” ์ด ๋ฉ”์„œ๋“œ๋ฅผ ๋ฐ”๋กœ ์ถ”์ƒ ์œผ๋กœ ์„ ์–ธํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ด๋ ‡๊ฒŒ ํ•˜๋ฉด ๋ถ€๋ชจ ํด๋ž˜์Šค์—์„œ ์ด ๋ฉ”์„œ๋“œ์˜ ๋””ํดํŠธ ๊ตฌํ˜„์„ ์ƒ๋žตํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ํ•˜์ง€๋งŒ ๋ชจ๋“  ์ž์‹ ํด๋ž˜์Šค๋“ค์€ ๊ฐ•์ œ์ ์œผ๋กœ ์ด ๋ฉ”์„œ๋“œ๋ฅผ ๊ฐ์ž ๊ตฌํ˜„ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

design-patterns-ts-1-9

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

1
bag = [new Cat(), new Dog()];
2
3
foreach (Animal a : bag)
4
a.makeSound()
5
6
// ์•ผ์˜น!
7
// ๋ฉ๋ฉ!

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

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

๋‹คํ˜•์„ฑ์€ ๊ฐ์ฒด๊ฐ€ ๋‹ค๋ฅธ ๋ฌด์–ธ๊ฐ€์ธ ์ฒ™ โ€˜๊ฐ€์žฅโ€™์„ ํ•  ์ˆ˜ ์žˆ๋Š” ๊ธฐ๋Šฅ์ด๋ผ๊ณ ๋„ ์ƒ๊ฐํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ผ๋ฐ˜์ ์œผ๋กœ๋Š” ๊ฐ์ฒด๊ฐ€ ํ™•์žฅํ•˜๋Š” ํด๋ž˜์Šค ๋˜๋Š” ๊ตฌํ˜„ํ•˜๋Š” ์ธํ„ฐํŽ˜์ด์Šค์ธ ์ฒ™ ๊ฐ€์žฅํ•ฉ๋‹ˆ๋‹ค. ์œ„ ์˜ˆ์‹œ์—์„œ๋Š” ๊ฐ€๋ฐฉ์— ๋“  ๊ฐœ์™€ ๊ณ ์–‘์ด๊ฐ€ ์ผ๋ฐ˜์ ์ธ ๋™๋ฌผ์ธ ์ฒ™ ๊ฐ€์žฅํ•˜๊ณ  ์žˆ์—ˆ์Šต๋‹ˆ๋‹ค.


3. ๊ฐ์ฒด ๊ฐ„์˜ ๊ด€๊ณ„

์ „์— ์„ค๋ช…ํ•œ ์ƒ์† ๋ฐ ๊ตฌํ˜„ ์™ธ์—๋„ ๊ฐ์ฒด๋“ค ์‚ฌ์ด์—๋Š” ๋‹ค๋ฅธ ์œ ํ˜•์˜ ๊ด€๊ณ„๋“ค์ด ์žˆ์Šต๋‹ˆ๋‹ค

3.1 ์˜์กด์„ฑ

design-patterns-ts-1-10

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

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


3.2 ์—ฐ๊ด€ ๊ด€๊ณ„

design-patterns-ts-1-11

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

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

์—ฐ๊ด€ ๊ด€๊ณ„์™€ ์˜์กด ๊ด€๊ณ„์˜ ์ฐจ์ด๋ฅผ ํ™•์‹คํžˆ ์งš๊ณ  ๋„˜์–ด๊ฐˆ ์ˆ˜ ์žˆ๊ฒŒ ๋‹ค๋ฅธ ์˜ˆ๋ฅผ ํ•˜๋‚˜ ๋” ์‚ดํŽด๋ด…์‹œ๋‹ค. Professor (๊ต์ˆ˜) ํด๋ž˜์Šค๊ฐ€ ์žˆ๋‹ค๊ณ  ๊ฐ€์ •ํ•ฉ์‹œ๋‹ค.

1
class Professor is
2
field Student student
3
// ...
4
method teach(Course c) is
5
// ...
6
this.student.remember(c.getKnowledge())

์ด์ œ teach ๋ฉ”์„œ๋“œ๋ฅผ ์‚ดํŽด๋ณด์„ธ์š”. ์ด ๋ฉ”์„œ๋“œ๋Š” Course (์ˆ˜์—… ๊ณผ์ •) ํด๋ž˜์Šค๋ฅผ ์ธ์ˆ˜๋กœ ๋ฐ›์œผ๋ฉฐ, ์ด ์ธ์ˆ˜๋Š” ๋ฉ”์„œ๋“œ์˜ ๋ณธ๋ฌธ์—์„œ ์‚ฌ์šฉ๋ฉ๋‹ˆ๋‹ค. ๋ˆ„๊ตฐ๊ฐ€๊ฐ€ getKnowledge ๋ฉ”์„œ๋“œ์˜ ์‹œ๊ทธ๋‹ˆ์ฒ˜๋ฅผ ๋ณ€๊ฒฝํ•˜๋ฉด(์˜ˆ: ์ด๋ฆ„์„ ๋ฐ”๊พผ๋‹ค๋“ ์ง€ ๋˜๋Š” ํ•„์š”ํ•œ ๋งค๊ฐœ๋ณ€์ˆ˜๋ฅผ ์ถ”๊ฐ€ํ•œ๋‹ค๋“ ์ง€ ๋“ฑ) ์ฝ”๋“œ๊ฐ€ ๋” ์ด์ƒ ์ž‘๋™ํ•˜์ง€ ์•Š์„ ๊ฒƒ์ž…๋‹ˆ๋‹ค. ๋ฐ”๋กœ ์ด๊ฒƒ์ด Professor ํด๋ž˜์Šค๊ฐ€ Course ํด๋ž˜์Šค์— ์˜์กดํ•œ๋‹ค๊ณ  ๋งํ•  ์ˆ˜ ์žˆ๋Š” ์ด์œ ์ž…๋‹ˆ๋‹ค.

์ด์ œ student ํ•„๋“œ๋ฅผ ์‚ดํŽด๋ณด๊ณ  ํ•ด๋‹น ํ•„๋“œ๊ฐ€ teach ๋ฉ”์„œ๋“œ์—์„œ ์–ด๋–ป๊ฒŒ ์‚ฌ์šฉ๋˜๋Š”์ง€๋„ ์‚ดํŽด๋ณด์„ธ์š”. Student ํด๋ž˜์Šค๋Š” Professor ํด๋ž˜์Šค์— ์˜์กดํ•˜๋Š” dependency๋ผ๊ณ  ํ™•์‹คํžˆ ๋งํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์™œ๋ƒํ•˜๋ฉด remember ๋ฉ”์„œ๋“œ์˜ ์‹œ๊ทธ๋‹ˆ์ฒ˜๊ฐ€ ๋ณ€๊ฒฝ๋˜๋ฉด, Professor์˜ ์ฝ”๋“œ๊ฐ€ ๊นจ์ง€๊ธฐ ๋•Œ๋ฌธ์ž…๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ Professor์˜ ๋ชจ๋“  ๋ฉ”์„œ๋“œ๋Š” student ํ•„๋“œ์— ์ ‘๊ทผํ•  ์ˆ˜ ์žˆ์œผ๋ฏ€๋กœ, Studentํด๋ž˜์Šค๋Š” Professor์— ์˜์กดํ•˜๋Š” dependency์ผ ๋ฟ๋งŒ์ด ์•„๋‹ˆ๋ผ Professor์™€ ์—ฐ๊ด€ ๊ด€๊ณ„๊ฐ€ ์žˆ๊ธฐ๋„ ํ•ฉ๋‹ˆ๋‹ค.


3.3 ์ง‘ํ•ฉ ๊ด€๊ณ„

design-patterns-ts-1-12

์ง‘ํ•ฉ ๊ด€๊ณ„๋Š” ์—ฌ๋Ÿฌ ๊ฐ์ฒด ๊ฐ„์˜ โ€˜์ผ-๋Œ€-๋‹คโ€™, โ€˜๋‹ค-๋Œ€-๋‹คโ€™ ๋˜๋Š” โ€˜์ „์ฒด-๋ถ€๋ถ„โ€™ ๊ด€๊ณ„๋“ค์„ ๋‚˜ํƒ€๋‚ด๋Š” ํŠน์ˆ˜ํ•œ ์œ ํ˜•์˜ ์—ฐ๊ด€ ๊ด€๊ณ„์ž…๋‹ˆ๋‹ค

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

UML์€ ํด๋ž˜์Šค๋“ค ๊ฐ„์˜ ๊ด€๊ณ„๋ฅผ ๋‚˜ํƒ€๋ƒ…๋‹ˆ๋‹ค. ์ด๊ฒƒ์€ ๋‹ค์ด์–ด๊ทธ๋žจ์—์„œ์˜ ๊ฐ ์‚ฌ๋ฌผ์ด ํ•˜๋‚˜์˜ โ€˜๋ธ”๋กโ€™๋งŒ์œผ๋กœ ํ‘œ์‹œ๋˜๋”๋ผ๋„ ๋Œ€ํ•™ ๊ฐ์ฒด๊ฐ€ ์—ฌ๋Ÿฌ ํ•™๊ณผ๋กœ ๊ตฌ์„ฑ๋  ์ˆ˜ ์žˆ์Œ์„ ์˜๋ฏธํ•ฉ๋‹ˆ๋‹ค. UML ํ‘œ๊ธฐ๋ฒ•์—์„œ๋Š” ๊ด€๊ณ„์˜ ์–‘์ชฝ์— ์ˆ˜๋Ÿ‰์„ ํ‘œ์‹œ๋‚ผ ์ˆ˜ ์žˆ์ง€๋งŒ ์ด ์ˆ˜๋Ÿ‰์ด ๋งฅ๋ฝ์ƒ ๋ช…ํ™•ํ•˜๋ฉด ์ƒ๋žตํ•ด๋„ ๋ฉ๋‹ˆ๋‹ค.


3.4 ํ•ฉ์„ฑ ๊ด€๊ณ„

design-patterns-ts-1-13

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

๋งŽ์€ ์‚ฌ๋žŒ์ด 'ํ•ฉ์„ฑ'์ด๋ผ๋Š” ์šฉ์–ด๋ฅผ ํ•ฉ์„ฑ๊ณผ ์ง‘ํ•ฉ ๊ด€๊ณ„ ๋ชจ๋‘๋ฅผ ๋œปํ•˜๋Š” ์ƒํ™ฉ์—์„œ ์‚ฌ์šฉํ•˜๊ณค ํ•ฉ๋‹ˆ๋‹ค. ๊ทธ ๊ฐ€์žฅ ์•…๋ช… ๋†’์€ ์˜ˆ์‹œ๊ฐ€ ๋ฐ”๋กœ โ€˜์ƒ์†๋ณด๋‹ค ํ•ฉ์„ฑ์„ ์„ ํƒํ•˜์‹ญ์‹œ์˜คโ€™๋ผ๋Š” ์œ ๋ช…ํ•œ ์›์น™์ž…๋‹ˆ๋‹ค. ์‚ฌ๋žŒ๋“ค์ด ๋‘˜ ์‚ฌ์ด์˜ ์ฐจ์ด์ ์— ๋Œ€ํ•ด ๋ฌด์ง€ํ•ด์„œ๊ฐ€ ์•„๋‹ˆ๋ผ, ํ•ฉ์„ฑ์„ ๋œปํ•˜๋Š” composition(๊ตฌ์„ฑ)์ด๋ผ๋Š” ๋‹จ์–ด(์˜ˆ: โ€˜๊ฐ์ฒด ๊ตฌ์„ฑโ€™)๊ฐ€ ์˜์–ด์—์„œ๋Š” ๋” ์ž์—ฐ์Šค๋Ÿฝ๊ฒŒ ๋“ค๋ฆฌ๊ธฐ ๋•Œ๋ฌธ์ž…๋‹ˆ๋‹ค


4. ํฐ ๊ทธ๋ฆผ

์ด์ œ๊นŒ์ง€ ๊ฐ์ฒด ๊ฐ„์˜ ๋ชจ๋“  ๊ด€๊ณ„์— ๋Œ€ํ•ด ์‚ดํŽด๋ณด์•˜์œผ๋ฏ€๋กœ ์ด ๊ด€๊ณ„๋“ค์ด ์–ด๋–ป๊ฒŒ ์—ฐ๊ฒฐ๋˜์—ˆ๋Š”์ง€ ์‚ดํŽด๋ด…์‹œ๋‹ค. ์ด ์„ค๋ช…์ด โ€˜์ง‘ํ•ฉ ๊ด€๊ณ„์™€ ํ•ฉ์„ฑ ๊ด€๊ณ„์˜ ์ฐจ์ด์ ์€ ๋ฌด์—‡์ž…๋‹ˆ๊นŒโ€™ ๋˜๋Š” โ€˜์ƒ์† ๊ด€๊ณ„๋Š” ์˜์กด ๊ด€๊ณ„์˜ ์ผ์ข…์ž…๋‹ˆ๊นŒโ€™์™€ ๊ฐ™์€ ์งˆ๋ฌธ๋“ค์— ๋‹ต์ด ๋˜์—ˆ๊ธฐ๋ฅผ ๋ฐ”๋ž๋‹ˆ๋‹ค.

design-patterns-ts-1-14

์˜์—ฐ ์ง‘ํ•ฉ ๊ตฌ์ƒ

  • ์˜์กด ๊ด€๊ณ„: ํด๋ž˜์Šค A๋Š” ํด๋ž˜์Šค B๊ฐ€ ๋ณ€๊ฒฝ๋  ๋•Œ ์˜ํ–ฅ์„ ๋ฐ›์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
  • ์—ฐ๊ด€ ๊ด€๊ณ„: ๊ฐ์ฒด ะ๊ฐ€ ๊ฐ์ฒด B์— ๋Œ€ํ•ด ์•Œ๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. ํด๋ž˜์Šค A๋Š” B์— ์˜์กดํ•ฉ๋‹ˆ๋‹ค.
  • ์ง‘ํ•ฉ ๊ด€๊ณ„: ๊ฐ์ฒด ะ๊ฐ€ ๊ฐ์ฒด B์— ๋Œ€ํ•ด ์•Œ๊ณ  ์žˆ์œผ๋ฉฐ, B๋กœ ๊ตฌ์„ฑ๋ฉ๋‹ˆ๋‹ค. ํด๋ž˜์Šค A๋Š” B์— ์˜์กดํ•ฉ๋‹ˆ๋‹ค.
  • ํ•ฉ์„ฑ ๊ด€๊ณ„: ๊ฐ์ฒด ะ๊ฐ€ ๊ฐ์ฒด B์— ๋Œ€ํ•ด ์•Œ๊ณ , B๋กœ ๊ตฌ์„ฑ๋˜๋ฉฐ, B์˜ ์ˆ˜๋ช… ์ฃผ๊ธฐ๋ฅผ ๊ด€๋ฆฌํ•ฉ๋‹ˆ๋‹ค. ํด๋ž˜์Šค A๋Š” B์— ์˜์กดํ•ฉ๋‹ˆ๋‹ค.
  • ๊ตฌํ˜„ ๊ด€๊ณ„: ํด๋ž˜์Šค ะ๊ฐ€ ์ธํ„ฐํŽ˜์ด์Šค B์— ์„ ์–ธ๋œ ๋ฉ”์„œ๋“œ๋ฅผ ์ •์˜ํ•ฉ๋‹ˆ๋‹ค.
    • ๊ฐ์ฒด A๋Š” B์ฒ˜๋Ÿผ ์ฒ˜๋ฆฌ๋  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ํด๋ž˜์Šค A๋Š” B์— ์˜์กดํ•ฉ๋‹ˆ๋‹ค.
  • ์ƒ์† ๊ด€๊ณ„: ํด๋ž˜์Šค ะ๊ฐ€ ํด๋ž˜์Šค B์˜ ์ธํ„ฐํŽ˜์ด์Šค ๋ฐ ๊ตฌํ˜„ ๊ด€๊ณ„๋ฅผ ์ƒ์†ํ•˜์ง€๋งŒ ์ด๋ฅผ ํ™•์žฅํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
    • ๊ฐ์ฒด A๋Š” B์ฒ˜๋Ÿผ ์ฒ˜๋ฆฌ๋  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ํด๋ž˜์Šค A๋Š” B์— ์˜์กดํ•ฉ๋‹ˆ๋‹ค.