A A
[Design Pattern] Solid Principles (์†”๋ฆฌ๋“œ ์›์น™)

Solid Principles (์†”๋ฆฌ๋“œ ์›์น™)

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

 

  • S - Single Responsibility Principle (๋‹จ์ผ ์ฑ…์ž„ ์›์น™)
    • ๊ฐ ํด๋ž˜์Šค๋Š” ํ•˜๋‚˜์˜ ์ฑ…์ž„๋งŒ์„ ๊ฐ€์ ธ์•ผ ํ•ฉ๋‹ˆ๋‹ค. ์ฆ‰, ์‹œ์Šคํ…œ์—์„œ ๋ณ€๊ฒฝ์ด ํ•„์š”ํ•œ ํ•œ ๊ฐ€์ง€ ์ด์œ ๋งŒ์„ ๊ฐ€์ง€๊ณ  ์žˆ์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ์ด ์›์น™์€ ์ฝ”๋“œ์˜ ์žฌ์‚ฌ์šฉ์„ฑ์„ ๋†’์ด๊ณ , ๋ณ€๊ฒฝ์— ๋Œ€ํ•œ ์œ ์—ฐ์„ฑ์„ ์ฆ๊ฐ€์‹œํ‚ต๋‹ˆ๋‹ค.
  • O - Open/Closed Principle (๊ฐœ๋ฐฉ/ํ์‡„ ์›์น™)
    • ์†Œํ”„ํŠธ์›จ์–ด์˜ ์—”ํ‹ฐํ‹ฐ(ํด๋ž˜์Šค, ๋ชจ๋“ˆ, ํ•จ์ˆ˜ ๋“ฑ)๋Š” ํ™•์žฅ์— ๋Œ€ํ•ด์„œ๋Š” ์—ด๋ ค ์žˆ์–ด์•ผ ํ•˜์ง€๋งŒ, ๋ณ€๊ฒฝ์— ๋Œ€ํ•ด์„œ๋Š” ๋‹ซํ˜€ ์žˆ์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ์ฆ‰, ๊ธฐ์กด์˜ ์ฝ”๋“œ๋ฅผ ๋ณ€๊ฒฝํ•˜์ง€ ์•Š๊ณ ๋„, ์‹œ์Šคํ…œ์˜ ๊ธฐ๋Šฅ์„ ํ™•์žฅํ•  ์ˆ˜ ์žˆ์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ์ด ์›์น™์€ ์œ ์—ฐํ•˜๊ณ  ํ™•์žฅ์„ฑ ์žˆ๋Š” ์†Œํ”„ํŠธ์›จ์–ด ์„ค๊ณ„๋ฅผ ๊ฐ€๋Šฅํ•˜๊ฒŒ ํ•ฉ๋‹ˆ๋‹ค.
  • L - Liskov Substitution Principle (๋ฆฌ์Šค์ฝ”ํ”„ ์น˜ํ™˜ ์›์น™)
    • ํ”„๋กœ๊ทธ๋žจ์—์„œ ๋ถ€๋ชจ ํด๋ž˜์Šค์˜ ์ธ์Šคํ„ด์Šค๋ฅผ ์ž์‹ ํด๋ž˜์Šค์˜ ์ธ์Šคํ„ด์Šค๋กœ ๋Œ€์ฒดํ•  ์ˆ˜ ์žˆ์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค(๋‹จ, ๋ถ€๋ชจ ํด๋ž˜์Šค์˜ ์ธ์Šคํ„ด์Šค๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๊ณณ์— ์ž์‹ ํด๋ž˜์Šค์˜ ์ธ์Šคํ„ด์Šค๋ฅผ ๋‘์–ด๋„ ํ”„๋กœ๊ทธ๋žจ์˜ ์˜๋ฏธ๊ฐ€ ๋ณ€๊ฒฝ๋˜์ง€ ์•Š์•„์•ผ ํ•ฉ๋‹ˆ๋‹ค). ์ด ์›์น™์€ ์ƒ์†์„ ์‚ฌ์šฉํ•  ๋•Œ์˜ ๊ฐ€์ด๋“œ๋ผ์ธ์„ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค.
  • I - Interface Segregation Principle (์ธํ„ฐํŽ˜์ด์Šค ๋ถ„๋ฆฌ ์›์น™)
    • ํด๋ผ์ด์–ธํŠธ๋Š” ์ž์‹ ์ด ์‚ฌ์šฉํ•˜์ง€ ์•Š๋Š” ๋ฉ”์†Œ๋“œ์— ์˜์กดํ•˜๊ฒŒ ๋˜์–ด์„œ๋Š” ์•ˆ ๋ฉ๋‹ˆ๋‹ค. ์ด ์›์น™์€ 'ํฐ' ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ํด๋ผ์ด์–ธํŠธ๊ฐ€ ์‹ค์ œ๋กœ ์‚ฌ์šฉํ•˜๋Š” ๋ฉ”์†Œ๋“œ๋งŒ ํฌํ•จํ•˜๋Š” ์—ฌ๋Ÿฌ ๊ฐœ์˜ '์ž‘์€' ์ธํ„ฐํŽ˜์ด์Šค๋กœ ๋ถ„๋ฆฌํ•ด์•ผ ํ•œ๋‹ค๊ณ  ์ฃผ์žฅํ•ฉ๋‹ˆ๋‹ค. ์ด๋Š” ์ธํ„ฐํŽ˜์ด์Šค์˜ ๋ถ„๋ฆฌ๋ฅผ ํ†ตํ•ด ์‹œ์Šคํ…œ์˜ ๊ฒฐํ•ฉ๋„๋ฅผ ๋‚ฎ์ถ”๊ณ , ์œ ์—ฐ์„ฑ์„ ํ–ฅ์ƒ์‹œํ‚ต๋‹ˆ๋‹ค.
  • D - Dependency Inversion Principle (์˜์กด์„ฑ ์—ญ์ „ ์›์น™)
    • ๊ณ ์ˆ˜์ค€ ๋ชจ๋“ˆ์€ ์ €์ˆ˜์ค€ ๋ชจ๋“ˆ์— ์˜์กดํ•ด์„œ๋Š” ์•ˆ ๋˜๋ฉฐ, ๋‘˜ ๋‹ค ์ถ”์ƒํ™”์— ์˜์กดํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ์ถ”์ƒํ™”๋Š” ์„ธ๋ถ€ ์‚ฌํ•ญ์— ์˜์กดํ•ด์„œ๋Š” ์•ˆ ๋˜๋ฉฐ, ์„ธ๋ถ€ ์‚ฌํ•ญ์€ ์ถ”์ƒํ™”์— ์˜์กดํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ์ด ์›์น™์€ ๋ชจ๋“ˆ ๊ฐ„์˜ ์˜์กด์„ฑ์„ ๊ด€๋ฆฌํ•˜๋Š” ๋ฐฉ๋ฒ•์„ ์ œ์‹œํ•˜์—ฌ, ์ฝ”๋“œ์˜ ์žฌ์‚ฌ์šฉ์„ฑ๊ณผ ์œ ์ง€๋ณด์ˆ˜์„ฑ์„ ๋†’์ž…๋‹ˆ๋‹ค.

Single Responsbility Principle (SRP-๋‹จ์ผ ์ฑ…์ž„ ์›์น™)

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

 

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

 

  • ๋‹จ์ผ ์ฑ…์ž„ ์›์น™์„ ์ ์šฉํ•  ๋•Œ ์ฃผ์˜ํ•  ์ ์€, '์ฑ…์ž„'์˜ ๋ฒ”์œ„์™€ ์ •์˜๋ฅผ ๋„ˆ๋ฌด ์ข๊ฒŒ ๋ณด์ง€ ์•Š๋„๋ก ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.
  • ๋„ˆ๋ฌด ๋งŽ์€ ์„ธ๋ถ„ํ™”๋Š” ์˜คํžˆ๋ ค ๊ด€๋ฆฌํ•ด์•ผ ํ•  ํด๋ž˜์Šค์˜ ์ˆ˜๊ฐ€ ์ฆ๊ฐ€ํ•˜์—ฌ ๋ณต์žก์„ฑ์„ ๋†’์ผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
  • ๋”ฐ๋ผ์„œ, ์ ์ ˆํ•œ ์ˆ˜์ค€์—์„œ ํด๋ž˜์Šค์˜ ์ฑ…์ž„์„ ๋ถ„๋ฆฌํ•˜๋Š” ๊ท ํ˜•์„ ์ฐพ๋Š” ๊ฒƒ์ด ์ค‘์š”ํ•ฉ๋‹ˆ๋‹ค.


Example

  • Add ํ•จ์ˆ˜๋Š” ๋ง์…ˆ์„ ํ•˜๋Š”๊ฒƒ์—๋งŒ ์ฑ…์ž„์„ ๋‹คํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.
  • numPrint ํ•จ์ˆ˜๋Š” ์ˆซ์ž๋ฅผ ์ถœ๋ ฅํ•˜๋Š” ๊ฒƒ์—๋งŒ ์ฑ…์ž„์„ ๋‹ค ํ•ด์•ผํ•ฉ๋‹ˆ๋‹ค.
  • addPrintํ•จ์ˆ˜๋Š” Single Responsbility ์›์น™์„ ๋”ฐ๋ฅด์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

ํด๋ž˜์Šค๋กœ ์ž‘์„ฑ๋œ ์ฝ”๋“œ์˜ ์˜ˆ์‹œ


Open-Close Principle (OCP, ๊ฐœ๋ฐฉ-ํŒจ์‡„์›์น™)

๊ฐœ๋ฐฉ-ํ์‡„ ์›์น™(OCP, Open-Closed Principle)์€ ์†Œํ”„ํŠธ์›จ์–ด ์„ค๊ณ„์˜ ์ค‘์š”ํ•œ ์›์น™ ์ค‘ ํ•˜๋‚˜๋กœ, ์œ ์—ฐํ•˜๊ณ  ํ™•์žฅ ๊ฐ€๋Šฅํ•˜๋ฉฐ, ๋™์‹œ์— ์•ˆ์ •์ ์ธ ์†Œํ”„ํŠธ์›จ์–ด ์‹œ์Šคํ…œ์„ ๊ตฌ์ถ•ํ•˜๊ณ ์ž ํ•  ๋•Œ ๋งค์šฐ ์ค‘์š”ํ•ฉ๋‹ˆ๋‹ค.

 

  • ๊ฐœ๋ฐฉ-ํ์‡„ ์›์น™(OCP, Open-Closed Principle)์˜ ํ•ต์‹ฌ ์•„์ด๋””์–ด๋Š” ์†Œํ”„ํŠธ์›จ์–ด ์ปดํฌ๋„ŒํŠธ(ํด๋ž˜์Šค, ๋ชจ๋“ˆ, ํ•จ์ˆ˜ ๋“ฑ)๊ฐ€ ์ƒˆ๋กœ์šด ๊ธฐ๋Šฅ์ด๋‚˜ ์š”๊ตฌ์‚ฌํ•ญ์˜ ์ถ”๊ฐ€์—๋Š” ์—ด๋ ค ์žˆ์–ด์•ผ ํ•˜์ง€๋งŒ, ๊ธฐ์กด์˜ ์†Œ์Šค ์ฝ”๋“œ๋Š” ๋ณ€๊ฒฝํ•˜์ง€ ์•Š์•„์•ผ ํ•œ๋‹ค๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค.

๊ฐœ๋ฐฉ-ํ์‡„ ์›์น™์˜ ๋ชฉ์ 

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

๊ฐœ๋ฐฉ-ํ์‡„ ์›์น™์„ ์ ์šฉํ•˜๋Š” ๋ฐฉ๋ฒ•

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

  • ๋ฐ์ฝ”๋ ˆ์ดํ„ฐ ํŒจํ„ด(Decorator Pattern) ์‚ฌ์šฉ
    • ๊ธฐ์กด ๊ฐ์ฒด์˜ ๊ธฐ๋Šฅ์„ ๋™์ ์œผ๋กœ ํ™•์žฅํ•  ์ˆ˜ ์žˆ๋Š” ๊ตฌ์กฐ๋ฅผ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค.
    • ์ด ํŒจํ„ด์„ ์‚ฌ์šฉํ•˜๋ฉด, ๊ธฐ์กด ์ฝ”๋“œ๋ฅผ ์ˆ˜์ •ํ•˜์ง€ ์•Š๊ณ ๋„ ๊ฐ์ฒด์˜ ์ฑ…์ž„์„ ์ถ”๊ฐ€ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

  • ํŒฉํ† ๋ฆฌ ๋ฉ”์†Œ๋“œ ํŒจํ„ด(Factory Method Pattern) ๋ฐ ์ถ”์ƒ ํŒฉํ† ๋ฆฌ ํŒจํ„ด(Abstract Factory Pattern) ์ ์šฉ
    • ๊ฐ์ฒด ์ƒ์„ฑ ๋กœ์ง์„ ํด๋ผ์ด์–ธํŠธ๋กœ๋ถ€ํ„ฐ ๋ถ„๋ฆฌํ•˜์—ฌ, ์‹œ์Šคํ…œ์— ์ƒˆ๋กœ์šด ํด๋ž˜์Šค๋ฅผ ์ถ”๊ฐ€ํ•˜๋”๋ผ๋„ ๊ธฐ์กด ์ฝ”๋“œ๋ฅผ ๋ณ€๊ฒฝํ•  ํ•„์š” ์—†์ด ๊ฐ์ฒด ์ƒ์„ฑ์ด ๊ฐ€๋Šฅํ•˜๊ฒŒ ํ•ฉ๋‹ˆ๋‹ค.


Dependency Inversion Principle (์˜์กด๊ด€๊ณ„ ์—ญ์ „ ์›์น™)

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

์˜์กด๊ด€๊ณ„ ์—ญ์ „ ์›์น™์˜ 2๊ฐ€์ง€ ์ฃผ์š” ์‚ฌํ•ญ

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

์˜์กด๊ด€๊ณ„ ์—ญ์ „ ์›์น™์˜ ์ด์ 

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

Example

์—ฌ๊ธฐ์„œ ํด๋ž˜์Šค๋Š” Cat, Dog ํด๋ž˜์Šค๋“ค์— ์˜์กด ๊ด€๊ณ„๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค.. ๋™๋ฌผ๋“ค์ด ๋Š˜์–ด๋‚˜๋ฉด Zooํด๋ž˜์Šค๋ฅผ ๊ณ„์† ์ˆ˜์ •ํ•ด์•ผํ—™๋‚˜๋”,

 

์˜์กด๊ด€๊ณ„๊ฐ€ Animal ์ถ”์ƒ ํด๋ž˜์Šค์— ์˜ํ•ด ์—ญ์ „๋˜์—ˆ๊ณ , Zoo ํด๋ž˜์Šค๋Š” ๊ฐ Cat, Dog ๋“ฑ์˜ ํด๋ž˜์Šค๋กœ๋ถ€ํ„ฐ ๋…๋ฆฝ๋˜์—ˆ์Šต๋‹ˆ๋‹ค.

 

์™ผ์ชฝ: DIP ๋”ฐ๋ฅด์ง€ ์•Š์Œ, ์˜ค๋ฅธ์ชฝ: DIP ๋”ฐ๋ฆ„


Liskov Substitution Principle

์ด ์›์น™์€ ํ•˜์œ„ ํƒ€์ž…์˜ ๊ฐ์ฒด๊ฐ€ ์ƒ์œ„ ํƒ€์ž…์˜ ๊ฐ์ฒด์™€ ๋™์ผํ•˜๊ฒŒ ํ–‰๋™ํ•ด์•ผ ํ•œ๋‹ค๋Š” ๊ฐœ๋…์„ ๊ธฐ๋ฐ˜์œผ๋กœ ํ•ฉ๋‹ˆ๋‹ค.
  • ์ปดํ“จํ„ฐ ํ”„๋กœ๊ทธ๋žจ์—์„œ ์ž๋ฃŒํ˜• S๊ฐ€ ์ž๋ฃŒํ˜• T์˜ ํ•˜์œ„ํ˜•์ด๋ผ๋ฉด ํ•„์š”ํ•œ ํ”„๋กœ๊ทธ๋žจ์˜ ์†์„ฑ(์ •ํ™•์„ฑ, ์ˆ˜ํ–‰ํ•˜๋Š” ์—…๋ฌด ๋“ฑ)์˜ ๋ณ€๊ฒฝ ์—†์ด ์ž๋ฃŒํ˜• T์˜ ๊ฐ์ฒด๋ฅผ ์ž๋ฃŒํ˜• S์˜ ๊ฐ์ฒด๋กœ ๊ต์ฒด(์น˜ํ™˜)ํ•  ์ˆ˜ ์žˆ์–ด์•ผ ํ•œ๋‹ค๋Š” ์›์น™์ž…๋‹ˆ๋‹ค.

๋ฆฌ์Šค์ฝ”ํ”„ ์น˜ํ™˜ ์›์น™์˜ ํ•ต์‹ฌ

  • ํ˜ธํ™˜์„ฑ: ํ•˜์œ„ ํด๋ž˜์Šค๋Š” ์ƒ์œ„ ํด๋ž˜์Šค์˜ ํ–‰๋™ ๊ทœ์•ฝ๊ณผ ํ˜ธํ™˜๋˜์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.
    • ์ฆ‰, ์ƒ์œ„ ํด๋ž˜์Šค์˜ ์ธ์Šคํ„ด์Šค๋ฅผ ํ•˜์œ„ ํด๋ž˜์Šค์˜ ์ธ์Šคํ„ด์Šค๋กœ ๋Œ€์ฒดํ•ด๋„, ํ”„๋กœ๊ทธ๋žจ์˜ ๊ธฐ๋Šฅ์ด ๋ณ€ํ•˜์ง€ ์•Š์•„์•ผ ํ•ฉ๋‹ˆ๋‹ค.
  • ์น˜ํ™˜์„ฑ: ์ƒ์œ„ ํด๋ž˜์Šค์˜ ์ธ์Šคํ„ด์Šค๋ฅผ ํ•˜์œ„ ํด๋ž˜์Šค์˜ ์ธ์Šคํ„ด์Šค๋กœ ์น˜ํ™˜(๊ต์ฒด)ํ•  ๋•Œ, ํ”„๋กœ๊ทธ๋žจ์˜ ์ •ํ™•์„ฑ์ด ์œ ์ง€๋˜์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค

๋ฆฌ์Šค์ฝ”ํ”„ ์น˜ํ™˜ ์›์น™์˜ ์ค‘์š”์„ฑ

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

์ ์šฉ ๋ฐฉ๋ฒ•

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

Example


Interface Segregation (์ธํ„ฐํŽ˜์ด์Šค ๋ถ„๋ฆฌ ์›์น™)

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

์ธํ„ฐํŽ˜์ด์Šค ๋ถ„๋ฆฌ ์›์น™์˜ ํ•ต์‹ฌ ํฌ์ธํŠธ

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

์ธํ„ฐํŽ˜์ด์Šค ๋ถ„๋ฆฌ ์›์น™์˜ ์ด์ 

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

Example