CodeGym /ํ–‰๋™ /All lectures for KO purposes /๊ตฌ์กฐ์  ํŒจํ„ด

๊ตฌ์กฐ์  ํŒจํ„ด

All lectures for KO purposes
๋ ˆ๋ฒจ 1 , ๋ ˆ์Šจ 1029
์‚ฌ์šฉ ๊ฐ€๋Šฅ

2.1 ์–ด๋Œ‘ํ„ฐ

์–ด๋Œ‘ํ„ฐ(Adapter)๋Š” ํŠน๋ณ„ํžˆ ์ƒ์„ฑ๋œ ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ํ†ตํ•ด ์ˆ˜์ •ํ•  ์ˆ˜ ์—†๋Š” ๊ฐœ์ฒด์˜ ๊ธฐ๋Šฅ ์‚ฌ์šฉ์„ ๊ตฌ์„ฑํ•˜๋„๋ก ์„ค๊ณ„๋œ ๊ตฌ์กฐ์  ์„ค๊ณ„ ํŒจํ„ด์ž…๋‹ˆ๋‹ค.

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

์–ด๋Œ‘ํ„ฐ ํŒจํ„ด

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

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

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

๊ฐ•์ :

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

2.2 ๋ฐ์ฝ”๋ ˆ์ดํ„ฐ

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

๋ฐ์ฝ”๋ ˆ์ดํ„ฐ ํŒจํ„ด

์ถ”๊ฐ€ ์˜๋ฌด๋ฅผ ๊ฐœ์ฒด์— ๋™์ ์œผ๋กœ ์—ฐ๊ฒฐํ•˜๋Š” ๋ฐ ์‚ฌ์šฉ๋ฉ๋‹ˆ๋‹ค .

๋งŽ์€ ๋ถ„๋“ค์ด ์งˆ๋ฌธํ•˜์‹ค ๊ฒƒ์ž…๋‹ˆ๋‹ค. ์–ด๋–ป๊ฒŒ ๋™์ ์œผ๋กœ(ํ”„๋กœ๊ทธ๋žจ์ด ์‹คํ–‰๋˜๋Š” ๋™์•ˆ) ๊ฐœ์ฒด์— ์ƒˆ ๋™์ž‘์„ ์ถ”๊ฐ€ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๊นŒ? ๊ฐœ์ฒด๋Š” ์กฐ๊ฐ, ์ฆ‰ ์ž‘์€ ๊ฐœ์ฒด๋กœ ์กฐ๋ฆฝํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์„œ๋ธ”๋ฆฟ์˜ ํ•„ํ„ฐ ์ฒด์ธ์„ ๊ธฐ์–ตํ•˜์‹ญ๋‹ˆ๊นŒ? ๋˜๋Š” filter(), map(), list()๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์ฟผ๋ฆฌ๋ฅผ ์ž‘์„ฑํ•  ๋•Œ Stream API?

IntStream.of(50, 60, 70, 80, 90).filter(x -> x < 90).map(x -> x + 10).limit(3).forEach(System.out::print);

๋ฐ์ฝ”๋ ˆ์ดํ„ฐ ํŒจํ„ด์˜ ๊ฐ•์ :

  • ๊ฐœ์ฒด์˜ ๊ธฐ๋Šฅ์„ ํ™•์žฅํ•˜๊ธฐ ์œ„ํ•ด ํ•˜์œ„ ํด๋ž˜์Šค๋ฅผ ๋งŒ๋“ค ํ•„์š”๊ฐ€ ์—†์Šต๋‹ˆ๋‹ค.
  • ์ƒˆ๋กœ์šด ๊ธฐ๋Šฅ์„ ์–ด๋””์—์„œ๋‚˜ ๋™์ ์œผ๋กœ ์—ฐ๊ฒฐํ•˜๋Š” ๊ธฐ๋Šฅ: ConcreteComponent ๊ฐœ์ฒด์˜ ์ฃผ์š” ๊ธฐ๋Šฅ ์•ž์ด๋‚˜ ๋’ค์—.

2.3 ํ”„๋ก์‹œ

ํ”„๋ก์‹œ ๋Š” ๋‹ค๋ฅธ ๊ฐœ์ฒด์— ๋Œ€ํ•œ ์•ก์„ธ์Šค๋ฅผ ์ œ์–ดํ•˜๋Š” โ€‹โ€‹๊ฐœ์ฒด๋ฅผ ์ œ๊ณตํ•˜๋Š” ๊ตฌ์กฐ์  ๋””์ž์ธ ํŒจํ„ด์œผ๋กœ ๋ชจ๋“  ํ˜ธ์ถœ์„ ๊ฐ€๋กœ์ฑ„๊ณ  ์ „๋‹ฌํ•ฉ๋‹ˆ๋‹ค.

๋Œ€๋ฆฌ์ธ(๋Œ€๋ฆฌ์ธ)

ํ”„๋ก์‹œ ํŒจํ„ด์€ ์‹ค์ œ ๊ฐ์ฒด ๋Œ€์‹  ๋Œ€์ฒด ๊ฐ์ฒด๋ฅผ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค. ์ด ๊ฐœ์ฒด๋Š” ์›๋ž˜ ๊ฐœ์ฒด์— ๋Œ€ํ•œ ์•ก์„ธ์Šค๋ฅผ ์ œ์–ดํ•ฉ๋‹ˆ๋‹ค. ๋งค์šฐ ์ž์ฃผ ์‚ฌ์šฉ๋ฉ๋‹ˆ๋‹ค.

Mockito ํ”„๋ ˆ์ž„์›Œํฌ๋ฅผ ์‚ฌ์šฉํ•˜๊ณ  Mockito.spy() ๋ฉ”์„œ๋“œ ๋˜๋Š” @Spy ์ฃผ์„์„ ์‚ฌ์šฉํ•˜์—ฌ ์‹ค์ œ ๊ฐ์ฒด์— ๋Œ€ํ•œ ํ˜ธ์ถœ์„ ๊ฐ€๋กœ์ฑˆ ๋ฐฉ๋ฒ•์„ ๊ธฐ์–ตํ•˜์‹ญ๋‹ˆ๊นŒ? ๊ทธ๋Ÿฐ ๋‹ค์Œ ์›๋ž˜ ๊ฐœ์ฒด์— ๋Œ€ํ•œ ๋ชจ๋“  ํ˜ธ์ถœ์ด ์ „๋‹ฌ๋˜๋Š” ํŠน์ˆ˜ ํ”„๋ก์‹œ ๊ฐœ์ฒด๊ฐ€ ์ƒ์„ฑ๋˜์—ˆ์Šต๋‹ˆ๋‹ค.

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

๋ชฉ์ ๋ณ„ ํ”„๋ก์‹œ ์œ ํ˜• :

  • ๋กœ๊น… ํ”„๋ก์‹œ : "์ œ๋ชฉ"์— ๋Œ€ํ•œ ๋ชจ๋“  ํ˜ธ์ถœ์„ ํ•ด๋‹น ๋งค๊ฐœ๋ณ€์ˆ˜์™€ ํ•จ๊ป˜ ๊ธฐ๋กํ•ฉ๋‹ˆ๋‹ค.
  • ์›๊ฒฉ ํ”„๋ก์‹œ (์›๊ฒฉ ํ”„๋ก์‹œ): ๋‹ค๋ฅธ ์ฃผ์†Œ ๊ณต๊ฐ„์ด๋‚˜ ์›๊ฒฉ ์‹œ์Šคํ…œ์— ์žˆ๋Š” "์ฃผ์ฒด"์™€์˜ ํ†ต์‹ ์„ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค. ๋˜ํ•œ ์š”์ฒญ๊ณผ ํ•ด๋‹น ์ธ์ˆ˜๋ฅผ ์ธ์ฝ”๋”ฉํ•˜๊ณ  ์ธ์ฝ”๋”ฉ๋œ ์š”์ฒญ์„ ์‹ค์ œ "์ œ๋ชฉ"์œผ๋กœ ๋ณด๋‚ด๋Š” ์ผ์„ ๋‹ด๋‹นํ•  ์ˆ˜๋„ ์žˆ์Šต๋‹ˆ๋‹ค.
  • ๊ฐ€์ƒ ํ”„๋ก์‹œ (๊ฐ€์ƒ ํ”„๋ก์‹œ): ์‹ค์ œ "์ œ๋ชฉ"์ด ์‹ค์ œ๋กœ ํ•„์š”ํ•  ๋•Œ๋งŒ ์ƒ์„ฑ๋˜๋„๋ก ํ•ฉ๋‹ˆ๋‹ค. ๋˜ํ•œ ์ƒ์„ฑ์„ ์ง€์—ฐ์‹œํ‚ค๊ธฐ ์œ„ํ•ด ์‹ค์ œ "์ œ๋ชฉ"์— ๋Œ€ํ•œ ์ผ๋ถ€ ์ •๋ณด๋ฅผ ์บ์‹œํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
  • Copy-on-write : ํด๋ผ์ด์–ธํŠธ๊ฐ€ ํŠน์ • ์ž‘์—…์„ ์ˆ˜ํ–‰ํ•  ๋•Œ "์ฃผ์ฒด"์˜ ๋ณต์‚ฌ๋ณธ์„ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค("๊ฐ€์ƒ ํ”„๋ก์‹œ"์˜ ํŠน์ˆ˜ํ•œ ๊ฒฝ์šฐ).
  • ๋ณดํ˜ธ ํ”„๋ก์‹œ : ํ˜ธ์ถœ์ž๊ฐ€ ์š”์ฒญ์„ ์ˆ˜ํ–‰ํ•˜๋Š” ๋ฐ ํ•„์š”ํ•œ ๊ถŒํ•œ์ด ์žˆ๋Š”์ง€ ํ™•์ธํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
  • Caching Proxy : ๊ณ„์‚ฐ ๊ฒฐ๊ณผ๋ฅผ ๊ณต์œ ํ•  ์ˆ˜ ์žˆ๋Š” ์—ฌ๋Ÿฌ ํด๋ผ์ด์–ธํŠธ์— ์ œ๊ณตํ•˜๊ธฐ ์ „์— ๊ณ„์‚ฐ ๊ฒฐ๊ณผ๋ฅผ ์ž„์‹œ๋กœ ์ €์žฅํ•ฉ๋‹ˆ๋‹ค.
  • ์Šคํฌ๋ฆฌ๋‹ ํ”„๋ก์‹œ: ์œ„ํ—˜ํ•œ ํด๋ผ์ด์–ธํŠธ๋กœ๋ถ€ํ„ฐ "๋Œ€์ƒ"์„ ๋ณดํ˜ธํ•ฉ๋‹ˆ๋‹ค(๋˜๋Š” ๊ทธ ๋ฐ˜๋Œ€).
  • Synchronization Proxy : ๋น„๋™๊ธฐ ๋ฉ€ํ‹ฐ์Šค๋ ˆ๋“œ ํ™˜๊ฒฝ์—์„œ โ€œSubjectโ€์— ๋Œ€ํ•œ ๋™๊ธฐํ™”๋œ ์ ‘๊ทผ ์ œ์–ด๋ฅผ ์ˆ˜ํ–‰ํ•ฉ๋‹ˆ๋‹ค.
  • "์Šค๋งˆํŠธ" ๋งํฌ (์Šค๋งˆํŠธ ์ฐธ์กฐ ํ”„๋ก์‹œ): "์ œ๋ชฉ"์— ๋Œ€ํ•œ ๋งํฌ๊ฐ€ ์ƒ์„ฑ๋  ๋•Œ ์ถ”๊ฐ€ ์ž‘์—…์„ ์ˆ˜ํ–‰ํ•ฉ๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด "์ œ๋ชฉ"์— ๋Œ€ํ•œ ํ™œ์„ฑ ๋งํฌ ์ˆ˜๋ฅผ ๊ณ„์‚ฐํ•ฉ๋‹ˆ๋‹ค.

2.4 ๋‹ค๋ฆฌ

๋ธŒ๋ฆฌ์ง€ ํŒจํ„ด์€ "๋…๋ฆฝ์ ์œผ๋กœ ๋ณ€๊ฒฝํ•  ์ˆ˜ ์žˆ๋„๋ก ์ถ”์ƒํ™”์™€ ๊ตฌํ˜„์„ ๋ถ„๋ฆฌ"ํ•˜๋Š” ๋ฐ ์‚ฌ์šฉ๋˜๋Š” ๊ตฌ์กฐ์  ๋””์ž์ธ ํŒจํ„ด์ž…๋‹ˆ๋‹ค.

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

๋‹ค๋ฆฌ

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

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

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

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

๋‹ค์ด์–ด๊ทธ๋žจ์—์„œ ํ™”์‚ดํ‘œ๋กœ ํ‘œ์‹œ๋œ ์—ฐ๊ฒฐ์€ ๋‘ ๊ฐ€์ง€ ์˜๋ฏธ๋ฅผ ๊ฐ€์งˆ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. a) Liskov ๋Œ€์ฒด ์›์น™์— ๋”ฐ๋ฅธ "์ข…๋ฅ˜" b) ์ถ”์ƒํ™”์˜ ๊ฐ€๋Šฅํ•œ ๊ตฌํ˜„ ์ค‘ ํ•˜๋‚˜. ์–ธ์–ด๋Š” ์ผ๋ฐ˜์ ์œผ๋กœ ์ƒ์†์„ ์‚ฌ์šฉํ•˜์—ฌ ํด๋ž˜์Šค ๊ณ„์ธต์„ ๋ถ€ํ’€๋ฆฌ๋Š” ๊ฒฝํ–ฅ์ด ์žˆ๋Š” a)์™€ b)๋ฅผ ๋ชจ๋‘ ๊ตฌํ˜„ํ•ฉ๋‹ˆ๋‹ค.

๋ธŒ๋ฆฌ์ง€๋Š” ์ด ๋ฌธ์ œ๋ฅผ ์ •ํ™•ํžˆ ํ•ด๊ฒฐํ•˜๋Š” ์—ญํ• ์„ ํ•ฉ๋‹ˆ๋‹ค. ๊ฐœ์ฒด๋Š” ๊ณ„์ธต ๊ตฌ์กฐ A์™€ ๊ณ„์ธต B์˜ ๊ฐœ์ฒด์—์„œ ์Œ์œผ๋กœ ์ƒ์„ฑ๋˜๊ณ  ๊ณ„์ธต A ๋‚ด์˜ ์ƒ์†์€ Liskov์— ๋”ฐ๋ฅด๋ฉด "๋‹ค์–‘์„ฑ"์˜ ์˜๋ฏธ๋ฅผ ๊ฐ€์ง€๋ฉฐ "๊ตฌํ˜„"์˜ ๊ฐœ๋…์— ๋Œ€ํ•ด ์ถ”์ƒํ™”์˜ "๊ฐ์ฒด A์—์„œ ์Œ์„ ์ด๋ฃฌ ๊ฐ์ฒด B๋กœ์˜ ๋งํฌ๊ฐ€ ์‚ฌ์šฉ๋ฉ๋‹ˆ๋‹ค.

2.5 ํŒŒ์‚ฌ๋“œ

Facade ํŒจํ„ด์€ ์‹œ์Šคํ…œ์˜ ์ ์ ˆํ•œ ๊ฐœ์ฒด์— ์œ„์ž„ํ•˜๋Š” ๋‹จ์ผ ๊ฐœ์ฒด์— ๋Œ€ํ•œ ๊ฐ€๋Šฅํ•œ ๋ชจ๋“  ์™ธ๋ถ€ ํ˜ธ์ถœ์„ ์ค„์ž„์œผ๋กœ์จ ์‹œ์Šคํ…œ์˜ ๋ณต์žก์„ฑ์„ ์ˆจ๊ธฐ๋Š” ๊ตฌ์กฐ์  ๋””์ž์ธ ํŒจํ„ด์ž…๋‹ˆ๋‹ค.

์™ธ๊ด€ ํ…œํ”Œ๋ฆฟ

์˜ˆ๋ฅผ ๋“ค์–ด ํ•ด๋‹น ํ•˜์œ„ ์‹œ์Šคํ…œ์— ๋Œ€ํ•œ ๊ฐ•๋ ฅํ•œ ๊ฒฐํ•ฉ์ด ๋ฐ”๋žŒ์งํ•˜์ง€ ์•Š๊ฑฐ๋‚˜ ํ•˜์œ„ ์‹œ์Šคํ…œ์˜ ๊ตฌํ˜„์ด ๋ณ€๊ฒฝ๋  ์ˆ˜ ์žˆ๋Š” ๊ฒฝ์šฐ ํ•˜์œ„ ์‹œ์Šคํ…œ์— ๋Œ€ํ•œ ์ผ๋ จ์˜ ์ด์งˆ์ ์ธ ๊ตฌํ˜„ ๋˜๋Š” ์ธํ„ฐํŽ˜์ด์Šค๋กœ ํ†ตํ•ฉ ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ์ œ๊ณตํ•˜๋Š” ๋ฐฉ๋ฒ•์€ ๋ฌด์—‡์ž…๋‹ˆ๊นŒ?

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

๋‹ค๋ฅธ ํ•˜์œ„ ์‹œ์Šคํ…œ ๊ตฌ์„ฑ ์š”์†Œ์˜ ๊ตฌํ˜„์€ ๋น„๊ณต๊ฐœ์ด๋ฉฐ ์™ธ๋ถ€ ๊ตฌ์„ฑ ์š”์†Œ์— ํ‘œ์‹œ๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. Facade ๊ฐœ์ฒด๋Š” ํ•˜์œ„ ์‹œ์Šคํ…œ ๊ตฌํ˜„์˜ ๋ณ€๊ฒฝ์— ๋Œ€ํ•œ ๋ณดํ˜ธ ์ธก๋ฉด์—์„œ ๋ณ€๊ฒฝ์— ์ €ํ•ญํ•˜๋Š” GRASP ํŒจํ„ด์˜ ๊ตฌํ˜„์„ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค.

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

์ฝ”๋ฉ˜ํŠธ
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION