Skip to content

Latest commit

ย 

History

History
181 lines (134 loc) ยท 11.1 KB

File metadata and controls

181 lines (134 loc) ยท 11.1 KB

SOLID ์›์น™

SOLID ์›์น™์ด๋ž€?

์ปดํ“จํ„ฐ ํ”„๋กœ๊ทธ๋ž˜๋ฐ์—์„œ ๊ฐ์ฒด ์ง€ํ–ฅ ํ”„๋กœ๊ทธ๋ž˜๋ฐ ๋ฐ ์„ค๊ณ„์˜ ๋‹ค์„ฏ๊ฐ€์ง€ ๊ธฐ๋ณธ ์›์น™์œผ๋กœ, ์‹œ๊ฐ„์ด ์ง€๋‚˜๋„ ์œ ์ง€ ๋ณด์ˆ˜์™€ ํ™•์žฅ์ด ์‰ฌ์šด ์‹œ์Šคํ…œ์„ ๋งŒ๋“ค๊ณ ์ž ํ•  ๋•Œ ์ ์šฉ ์‹œํ‚จ๋‹ค.

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

SOLID์˜ 5๊ฐ€์ง€ ์›๋ฆฌ

1. SRP(๋‹จ์ผ ์ฑ…์ž„ ์›์น™, Single Responsibility Principle)

์ •์˜

์†Œํ”„ํŠธ์›จ์–ด ์„ค๊ณ„ ๋ถ€ํ’ˆ(ํด๋ž˜์Šค, ๋ฉ”์†Œ๋“œ)๋Š” ํ•˜๋‚˜์˜ ์ฑ…์ž„(๊ธฐ๋Šฅ)๋งŒ ๊ฐ€์ ธ์•ผ ํ•œ๋‹ค.

  • SRP ์›๋ฆฌ๋ฅผ ์ ์šฉํ•˜๋ฉด ์ฑ…์ž„ ์˜์—ญ์ด ํ™•์‹คํ•ด์ง€๊ธฐ ๋•Œ๋ฌธ์—, ํ•œ ์ฑ…์ž„์˜ ๋ณ€๊ฒฝ์—์„œ ๋‹ค๋ฅธ ์ฑ…์ž„์˜ ๋ณ€๊ฒฝ์œผ๋กœ์˜ ์—ฐ์‡„์ž‘์šฉ์œผ๋กœ๋ถ€ํ„ฐ ์ž์œ ๋กœ์šธ ์ˆ˜ ์žˆ๋‹ค.
  • ์ฑ…์ž„์„ ์ ์ ˆํžˆ ๋ถ„๋ฐฐํ•จ์œผ๋กœ์จ ์ฝ”๋“œ์˜ ๊ฐ€๋…์„ฑ์ด ํ–ฅ์ƒ๋˜๊ณ  ์œ ์ง€๋ณด์ˆ˜๊ฐ€ ์šฉ์ดํ•ด์ง„๋‹ค.

์ ์šฉ ๋ฐฉ๋ฒ•

  • ๊ฐ ์ฑ…์ž„์„ ๊ฐ๊ฐ์˜ ๊ฐœ๋ณ„ ํด๋ž˜์Šค(ํ•จ์ˆ˜)๋กœ ๋ถ„ํ• ํ•˜์—ฌ ํด๋ž˜์Šค ๋‹น ํ•˜๋‚˜์˜ ์ฑ…์ž„๋งŒ์„ ๋งก๋„๋ก ํ•œ๋‹ค.
  • ๋ฆฌํŒฉํ† ๋ง(Refactoring: Improving the Design of Existing Code -Martin Fowler) ์—์„œ ์†Œ๊ฐœํ•˜๋Š” ๋Œ€๋ถ€๋ถ„์˜ ์œ„ํ—˜์ƒํ™ฉ์— ๋Œ€ํ•œ ํ•ด๊ฒฐ๋ฐฉ๋ฒ•์€ ์ง/๊ฐ„์ ‘์ ์œผ๋กœ SRP ์›๋ฆฌ์™€ ๊ด€๋ จ์ด ์žˆ๋‹ค.

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

์ ์šฉ ์ด์Šˆ

  • ํด๋ž˜์Šค ์ด๋ฆ„์€ ํ•ด๋‹น ํด๋ž˜์Šค์˜ ์ฑ…์ž„์„ ๋‚˜ํƒ€๋‚ผ ์ˆ˜ ์žˆ๋„๋ก ํ•˜๋Š” ๊ฒƒ์ด ์ข‹๋‹ค.
  • ๊ฐ ํด๋ž˜์Šค๋Š” ํ•˜๋‚˜์˜ ๊ฐœ๋…์„ ๋‚˜ํƒ€๋‚ด์–ด์•ผ ํ•œ๋‹ค.
  • ๋ฌด์กฐ๊ฑด ์ฑ…์ž„์„ ๋ถ„๋ฆฌํ•œ๋‹ค๊ณ  SRP๊ฐ€ ์ ์šฉ๋˜๋Š” ๊ฒƒ์€ ์•„๋‹ˆ๋‹ค.

์ ์šฉ ์‚ฌ๋ก€

๊ทธ๋ฆผ์—์„œ serialNumber๋Š” ๋ณ€ํ™”์š”์†Œ๋ผ ํ•  ์ˆ˜ ์—†๊ณ  ๊ณ ์œ ์ •๋ณด์ด๋‹ค. ์ด์™ธ์˜ ๋ณ€์ˆ˜๋“ค์€ ๋ชจ๋‘ ๋ณ€๊ฒฝ์ด ๋ฐœ์ƒํ•  ์ˆ˜ ์žˆ๋Š” ์š”์†Œ๋กœ ์˜ˆ์ƒ์ด ๋œ๋‹ค. ๋”ฐ๋ผ์„œ ๋ณ€ํ™”๊ฐ€ ๋ฐœ์ƒํ•˜๋ฉด ํ•ญ์ƒ ํ•ด๋‹น ํด๋ž˜์Šค๋ฅผ ์ˆ˜์ •ํ•ด์•ผ ํ•˜๋Š” ๋ถ€๋‹ด์ด ๋ฐœ์ƒํ•˜๊ฒŒ ๋˜๋ฏ€๋กœ SRP ์ ์šฉ์˜ ๋Œ€์ƒ์ด ๋œ๋‹ค.

๋‘ ๋ฒˆ์งธ ์ฝ”๋“œ์—์„œ๋Š” ๋ณ€ํ™”๊ฐ€ ์˜ˆ์ƒ๋˜๋Š” ํŠน์ • ์š”์†Œ๋“ค์„ ๋ถ„๋ฆฌํ•˜์˜€๋‹ค. ๋”ฐ๋ผ์„œ ๋ณ€๊ฒฝ์ด ์ผ์–ด๋‚˜๋ฉด NotebookSpec ํด๋ž˜์Šค๋งŒ ๋ณ€๊ฒฝํ•˜๋ฉด ๋œ๋‹ค. ๋ณ€ํ™”์— ์˜ํ•ด ๋ณ€๊ฒฝ๋˜๋Š” ๋ถ€๋ถ„์„ ํ•œ ๊ณณ์—์„œ ๊ด€๋ฆฌํ•  ์ˆ˜ ์žˆ๊ฒŒ ๋œ๋‹ค.

2. OCP(๊ฐœ๋ฐฉ-ํ์‡„ ์›์น™, Open/Closed Principle)

์ •์˜

๊ธฐ์กด์˜ ์ฝ”๋“œ๋ฅผ ๋ณ€๊ฒฝํ•˜์ง€ ์•Š๊ณ (Closed) ๊ธฐ๋Šฅ์„ ์ˆ˜์ •ํ•˜๊ฑฐ๋‚˜ ์ถ”๊ฐ€ํ•  ์ˆ˜ ์žˆ๋„๋ก(Open) ์„ค๊ณ„ํ•ด์•ผ ํ•œ๋‹ค.

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

์ ์šฉ ๋ฐฉ๋ฒ•

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

์ ์šฉ ์ด์Šˆ

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

์ ์šฉ ์‚ฌ๋ก€

SRP ์›๋ฆฌ๋ฅผ ์ ์šฉํ•˜์—ฌ Notebook์—์„œ ๋ณ€๊ฒฝ์ด ์˜ˆ์ƒ๋˜๋Š” ๋ถ€๋ถ„์„ ๋ฝ‘์•„ NotebookSpec์ด๋ผ๋Š” ์ƒˆ๋กœ์šด ํด๋ž˜์Šค๋ฅผ ๋งŒ๋“ค์–ด ๋ณ€ํ™”์š”์†Œ๋“ค์„ ํ•˜๋‚˜๋กœ ๋ชจ์•˜๋‹ค. ํ•˜์ง€๋งŒ ์—ฌ๊ธฐ์„œ๋„ ๋ณ€๊ฒฝ์ด ๋ฐœ์ƒํ•  ์ˆ˜ ์žˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด Notebook ์ด์™ธ์— ํ•ธ๋“œํฐ, ์ปดํ“จํ„ฐ์™€ ๊ฐ™์€ ๋‹ค๋ฅธ ์ „์ž๊ธฐ๊ธฐ๋“ค๋„ ๋‹ค๋ฃจ์–ด์•ผ ํ•œ๋‹ค๋ฉด ์ฒซ ๋ฒˆ์งธ ์ด๋ฏธ์ง€์˜ ์ฝ”๋“œ์ฒ˜๋Ÿผ ๋งค๋ฒˆ ์ƒˆ๋กœ์šด ๊ธฐ๊ธฐ๋“ค๊ณผ ๊ฐ™์€ ์š”์†Œ๋“ค์„ ๋งŒ๋“ค๊ฒŒ ๋  ๊ฒƒ์ด๋‹ค.

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

3. LSP(๋ฆฌ์Šค์ฝ”ํ”„ ์น˜ํ™˜ ์›์น™, Liskov Substitution Principle)

์ •์˜

์ž์‹ ํด๋ž˜์Šค๋Š” ์ตœ์†Œํ•œ ์ž์‹ ์˜ ๋ถ€๋ชจ ํด๋ž˜์Šค์—์„œ ๊ฐ€๋Šฅํ•œ ํ–‰์œ„๋Š” ์ˆ˜ํ–‰ํ•  ์ˆ˜ ์žˆ์–ด์•ผ ํ•œ๋‹ค๋Š” ์„ค๊ณ„ ์›์น™

  • ์ฆ‰, ์ž์‹ ํด๋ž˜์Šค๋Š” ์–ธ์ œ๋‚˜ ๋ถ€๋ชจ ํด๋ž˜์Šค์˜ ์—ญํ• ์„ ๋Œ€์ฒดํ•  ์ˆ˜ ์žˆ์–ด์•ผ ํ•œ๋‹ค.

  • ๋ถ€๋ชจ ํด๋ž˜์Šค์™€ ์ž์‹ ํด๋ž˜์Šค์˜ ํ–‰์œ„๊ฐ€ ์ผ๊ด€๋˜์–ด์•ผ ํ•œ๋‹ค.

  • ์ž์‹ ํด๋ž˜์Šค๋Š” ๋ถ€๋ชจ ํด๋ž˜์Šค์˜ ์ฑ…์ž„์„ ๋ฌด์‹œํ•˜๊ฑฐ๋‚˜ ์žฌ์ •์˜ํ•˜์ง€ ์•Š๊ณ  ํ™•์žฅ๋งŒ ์ˆ˜ํ–‰ํ•˜๋„๋ก ํ•ด์•ผ LSP๋ฅผ ๋งŒ์กฑํ•œ๋‹ค.

  • ์ƒ์† ๊ด€๊ณ„์—์„œ๋Š” ์ผ๋ฐ˜ํ™” ๊ด€๊ณ„(IS-A)๊ฐ€ ์„ฑ๋ฆฝํ•ด์•ผ ํ•œ๋‹ค.
    -> ์ผ๋ฐ˜ํ™” ๊ด€๊ณ„๊ฐ€ ์„ฑ๋ฆฝํ•œ๋‹ค = ์ผ๊ด€์„ฑ์ด ์žˆ๋‹ค

  • LSP์— ๋”ฐ๋ฅด๋ฉด ๊ฐ์ฒด์ง€ํ–ฅ์ ์œผ๋กœ ์„ค๊ณ„๋ฅผ ํ•˜๊ธฐ ์œ„ํ•ด์„œ๋Š” ์˜ค๋ฒ„๋ผ์ด๋“œ๋ฅผ ๊ฐ€๊ธ‰์  ํ”ผํ•˜๋Š” ๊ฒƒ์ด ์ข‹๋‹ค๊ณ  ํ•œ๋‹ค.

์ ์šฉ ๋ฐฉ๋ฒ•

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

์ ์šฉ ์ด์Šˆ

  • ํ˜ผ๋™๋  ์—ฌ์ง€๊ฐ€ ์—†๋‹ค๋ฉด ๊ทธ๋Œ€๋กœ ๋‘”๋‹ค.

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

์ •์˜

ํ•˜๋‚˜์˜ ์ผ๋ฐ˜์ ์ธ ์ธํ„ฐํŽ˜์ด์Šค๋ณด๋‹ค ์—ฌ๋Ÿฌ ๊ฐœ์˜ ๊ตฌ์ฒด์ ์ธ ์ธํ„ฐํŽ˜์ด์Šค๊ฐ€ ๋‚ซ๋‹ค.

  • ํ•œ ํด๋ž˜์Šค๋Š” ์ž์‹ ์ด ์‚ฌ์šฉํ•˜์ง€ ์•Š๋Š” ์ธํ„ฐํŽ˜์ด์Šค๋Š” ๊ตฌํ˜„ํ•˜์ง€ ๋ง์•„์•ผ ํ•œ๋‹ค.
  • ์ฆ‰ ์–ด๋–ค ํด๋ž˜์Šค๊ฐ€ ๋‹ค๋ฅธ ํด๋ž˜์Šค์— ์ข…์†๋  ๋•Œ์—๋Š” ๊ฐ€๋Šฅํ•œ ์ตœ์†Œํ•œ์˜ ์ธํ„ฐํŽ˜์ด์Šค๋งŒ์„ ์‚ฌ์šฉํ•ด์•ผ ํ•œ๋‹ค.
  • ์–ด๋–ค ํด๋ž˜์Šค๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ํด๋ผ์ด์–ธํŠธ๊ฐ€ ์—ฌ๋Ÿฌ ๊ฐœ๊ณ  ์ด๋“ค์ด ํ•ด๋‹น ํด๋ž˜์Šค์˜ ํŠน์ • ๋ถ€๋ถ„์ง‘ํ•ฉ๋งŒ์„ ์ด์šฉํ•œ๋‹ค๋ฉด, ์ด๋“ค์„ ๋”ฐ๋กœ ์ธํ„ฐํŽ˜์ด์Šค๋กœ ๋นผ๋‚ด์•ผ ํ•œ๋‹ค.
  • SRP๊ฐ€ ํด๋ž˜์Šค ๋ถ„๋ฆฌ๋ฅผ ํ†ตํ•ด ํด๋ž˜์Šค์˜ ๋‹จ์ผ์ฑ…์ž„์„ ๊ฐ•์กฐํ•œ๋‹ค๋ฉด ISP๋Š” ์ธํ„ฐํŽ˜์ด์Šค ๋ถ„๋ฆฌ๋ฅผ ํ†ตํ•ด ์ธํ„ฐํŽ˜์ด์Šค์˜ ๋‹จ์ผ์ฑ…์ž„์„ ๊ฐ•์กฐํ•œ๋‹ค.

์ ์šฉ ๋ฐฉ๋ฒ•

  • ํด๋ž˜์Šค์˜ ์ƒ์†์„ ์ด์šฉํ•˜์—ฌ ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ๋‚˜๋ˆŒ ์ˆ˜ ์žˆ๋‹ค.
  • ์œ„์ž„(Delegation)์„ ์ด์šฉํ•˜์—ฌ ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ๋‚˜๋ˆŒ ์ˆ˜ ์žˆ๋‹ค.

์ ์šฉ ์ด์Šˆ

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

์ ์šฉ ์‚ฌ๋ก€

์˜›๋‚  3Gํฐ๊ณผ ํ˜„์žฌ ์Šค๋งˆํŠธํฐ๋“ค์€ Phone์˜ ๊ธฐ๋Šฅ๋“ค์„ ์‚ฌ์šฉํ•˜๋ฏ€๋กœ ์ฒซ ๋ฒˆ์งธ ์‚ฌ์ง„์ฒ˜๋Ÿผ, Phone ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ ISP๋ฅผ ์ ์šฉํ•˜๋ ค๋ฉด Phone ์ธํ„ฐํŽ˜์ด์Šค์— ๋ชจ๋“  ํ•จ์ˆ˜๋ฅผ ์ •์˜ํ•˜๋Š” ๊ฒƒ๋ณด๋‹ค, Call, Sms, Alarm, Calculator ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ๊ฐ๊ฐ ์ •์˜ํ•˜์—ฌ,ํ•„์š”ํ•œ ํด๋ž˜์Šค์—์„œ ํ•ด๋‹น ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ๊ตฌํ˜„ํ•˜๋„๋ก ์„ค๊ณ„๋˜์–ด์•ผ ํ•œ๋‹ค.
์ด๋ ‡๊ฒŒ ์„ค๊ณ„๋ฅผ ํ•˜๋ฉด, ๊ฐ ์ธํ„ฐํŽ˜์ด์Šค์˜ ๋ฉ”์„œ๋“œ๋“ค์ด ์„œ๋กœ ์˜ํ–ฅ์„ ๋ฏธ์น˜์ง€ ์•Š๊ฒŒ ๋œ๋‹ค. ์ฆ‰, ์ž์‹ ์ด ์‚ฌ์šฉํ•˜์ง€ ์•Š๋Š” ๋ฉ”์„œ๋“œ์— ๋Œ€ํ•ด์„œ ์˜ํ–ฅ๋ ฅ์ด ์ค„์–ด๋“ค๊ฒŒ ๋œ๋‹ค.

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

์ •์˜

ํ”„๋กœ๊ทธ๋ž˜๋จธ๋Š” ์ถ”์ƒํ™”(๋ณ€ํ™”ํ•˜๊ธฐ ์–ด๋ ค์šด ๊ฒƒ)์— ์˜์กดํ•ด์•ผ์ง€, ๊ตฌ์ฒดํ™”(๋ณ€ํ™”ํ•˜๊ธฐ ์‰ฌ์šด ๊ฒƒ)์— ์˜์กดํ•˜๋ฉด ์•ˆ๋œ๋‹ค.

  • ์—ฌ๊ธฐ์„œ์˜ ์—ญ์ „์€ ๊ตฌ์กฐ์  ๋””์ž์ธ์—์„œ ๋ฐœ์ƒํ•˜๋˜ ํ•˜์œ„ ๋ ˆ๋ฒจ ๋ชจ๋“ˆ์˜ ๋ณ€๊ฒฝ์ด ์ƒ์œ„ ๋ ˆ๋ฒจ ๋ชจ๋“ˆ์˜ ๋ณ€๊ฒฝ์„ ์š”๊ตฌํ•˜๋Š” ์œ„๊ณ„๊ด€๊ณ„๋ฅผ ๋Š๋Š” ์˜๋ฏธ์˜ ์—ญ์ „์ด๋‹ค.

- ๊ฐ์ฒด๋“ค์ด ์„œ๋กœ ์ •๋ณด๋ฅผ ์ฃผ๊ณ  ๋ฐ›์„ ๋•Œ ์˜์กด ๊ด€๊ณ„๊ฐ€ ํ˜•์„ฑ๋˜๋Š”๋ฐ, ์ด ๋•Œ ๊ฐ์ฒด๋“ค์€ ๋‚˜๋ฆ„๋Œ€๋กœ์˜ ์›์น™์„ ๊ฐ–๊ณ  ์ •๋ณด๋ฅผ ์ฃผ๊ณ  ๋ฐ›์•„์•ผ ํ•œ๋‹ค๋Š” ์„ค๊ณ„ ์›์น™ - ์—ฌ๊ธฐ์„œ ์›์น™์€, ์ถ”์ƒ์„ฑ์ด ๋‚ฎ์€ ํด๋ž˜์Šค๋ณด๋‹ค ์ถ”์ƒ์„ฑ์ด ๋†’์€ ํด๋ž˜์Šค์™€ ์˜์กด ๊ด€๊ณ„๋ฅผ ๋งบ์–ด์•ผ ํ•œ๋‹ค๋Š” ๊ฒƒ์„ ์˜๋ฏธํ•œ๋‹ค. - ์ผ๋ฐ˜์ ์œผ๋กœ ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ํ™œ์šฉํ•˜๋ฉด ์ด ์›์น™์„ ์ค€์ˆ˜ํ•  ์ˆ˜ ์žˆ๊ฒŒ ๋œ๋‹ค. (์บก์Šํ™”)

์ ์šฉ ๋ฐฉ๋ฒ•

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

์ ์šฉ ์‚ฌ๋ก€

Client ๊ฐ์ฒด๋Š” Cat, Dog, Bird์˜ crying() ๋ฉ”์„œ๋“œ์— ์ง์ ‘ ์ ‘๊ทผํ•˜์ง€ ์•Š๊ณ , Animal ์ธํ„ฐํŽ˜์ด์Šค์˜ crying() ๋ฉ”์„œ๋“œ๋ฅผ ํ˜ธ์ถœํ•จ์œผ๋กœ์จ DIP๋ฅผ ๋งŒ์กฑํ•  ์ˆ˜ ์žˆ๋‹ค.


๋งˆ์น˜๋ฉฐ

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

ํ—ค๋“œํผ์ŠคํŠธ OOA&D ์ค‘์—์„œ

  1. ์—ฌ๋Ÿฌ๋ถ„์˜ ์†Œํ”„ํŠธ์›จ์–ด๊ฐ€ ๊ณ ๊ฐ์ด ์›ํ•˜๋Š” ๊ธฐ๋Šฅ์„ ํ•˜๋„๋ก ํ•˜์„ธ์š”.
  2. ๊ฐ์ฒด์ง€ํ–ฅ ๊ธฐ๋ณธ์›๋ฆฌ๋ฅผ ์ ์šฉํ•ด์„œ ์†Œํ”„ํŠธ์›จ์–ด๋ฅผ ์œ ์—ฐํ•˜๊ฒŒ ํ•˜์„ธ์š”.
  3. ์œ ์ง€๋ณด์ˆ˜์™€ ์žฌ์‚ฌ์šฉ์ด ์‰ฌ์šด ๋””์ž์ธ์„ ์œ„ํ•ด ๋…ธ๋ ฅํ•˜์„ธ์š”.

Reference

SOLID (๊ฐ์ฒด ์ง€ํ–ฅ ์„ค๊ณ„)

๊ฐ์ฒด์ง€ํ–ฅ ๊ฐœ๋ฐœ 5๋Œ€ ์›๋ฆฌ: SOLID

SOLID ์›์น™

[๋””์ž์ธ ํŒจํ„ด] SOLID ์›์น™