SOLID

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

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

ํด๋ž˜์Šค๋Š” ๋‹จ ํ•œ ๊ฐ€์ง€์˜ ๋ณ€๊ฒฝ ์ด์œ ๋กœ ๋ณ€๊ฒฝ์ด ๋˜์–ด์•ผ ํ•˜๋ฉฐ, ์ฑ…์ž„์ด ํ•˜๋‚˜์—ฌ์•ผ ํ•œ๋‹ค.

  • ํ•ต์‹ฌ ์—…๋ฌด ๊ทœ์น™(๊ธฐํšํŒ€ ์š”์ฒญ)๊ณผ ๊ธฐ์ˆ ์ ์ธ ์ฒ˜๋ฆฌ ๋ฐฉ์‹(DB, ์ด๋ฉ”์ผ ๋“ฑ ์ธํ”„๋ผ ๋‹ด๋‹น)์ด ๊ฐ™์€ ํด๋ž˜์Šค ๋‚ด์— ์žˆ๋‹ค๋ฉด ์ด๋Š” SRP ์œ„๋ฐ˜

  • ํ•ด๋‹น ํด๋ž˜์Šค๋ฅผ ๋ณ€๊ฒฝํ•ด์•ผ ํ•˜๋Š” ์ด์œ ๊ฐ€ ์˜ค์ง ํ•˜๋‚˜์ผ ๋•Œ, ๋‹จ์ผ ์ฑ…์ž„ ์›์น™์„ ์ž˜ ์ง€ํ‚จ ๊ฒƒ

spinner

๊ด€๋ จ๋œ ๊ธฐ๋Šฅ์ด ๋ชจ์—ฌ ์žˆ์–ด ์ˆ˜์ • ๋ฒ”์œ„๊ฐ€ ๋ช…ํ™•ํ•ด์ง€๋ฉฐ, ๋‹ค๋ฅธ ๊ธฐ๋Šฅ์— ์˜ํ–ฅ์„ ์ฃผ์ง€ ์•Š๊ณ  ๋…๋ฆฝ์ ์ธ ๋ณ€๊ฒฝ์ด ๊ฐ€๋Šฅํ•ด์ง„๋‹ค.

OCP: ๊ฐœ๋ฐฉ-ํ์‡„ ์›์น™(Open-Closed principle)

๊ธฐ์กด ์ฝ”๋“œ๋ฅผ ์ˆ˜์ •ํ•˜์ง€ ์•Š๊ณ  ์ƒˆ๋กœ์šด ๊ธฐ๋Šฅ์„ ์ถ”๊ฐ€ํ•  ์ˆ˜ ์žˆ๋Š” ์œ ์—ฐํ•œ ๊ตฌ์กฐ๋ฅผ ๋งŒ๋“œ๋Š” ๊ฒƒ์œผ๋กœ, ์ถ”์ƒํ™”์™€ ๋‹คํ˜•์„ฑ์„ ํ™œ์šฉํ•œ๋‹ค.

  • ํ™•์žฅ์— ์—ด๋ ค ์žˆ๋‹ค: ์ƒˆ๋กœ์šด ์š”๊ตฌ์‚ฌํ•ญ์ด ์™”์„ ๋•Œ ์ƒˆ๋กœ์šด ํด๋ž˜์Šค๋ฅผ ์ถ”๊ฐ€ํ•˜์—ฌ ๊ธฐ๋Šฅ ํ™•์žฅ

  • ๋ณ€๊ฒฝ์— ๋‹ซํ˜€ ์žˆ๋‹ค: ๊ธฐ๋Šฅ์„ ์ถ”๊ฐ€ํ•  ๋•Œ ๊ธฐ์กด ์ฝ”๋“œ๋ฅผ ์ˆ˜์ •ํ•˜์ง€ ์•Š์Œ

spinner

๊ธฐ์กด ์ฝ”๋“œ๋ฅผ ๊ฑด๋“œ๋ฆฌ์ง€ ์•Š์œผ๋ฏ€๋กœ ํšŒ๊ท€ ๋ฒ„๊ทธ ๋ฐœ์ƒ ๊ฐ€๋Šฅ์„ฑ์ด ๋‚ฎ์•„์ง„๋‹ค.

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

์„œ๋ธŒ ํƒ€์ž…์€ ์–ธ์ œ๋‚˜ ์ž์‹ ์˜ ๊ธฐ๋ฐ˜ ํƒ€์ž…(Super Type)์œผ๋กœ ๊ต์ฒดํ•  ์ˆ˜ ์žˆ์–ด์•ผ ํ•œ๋‹ค.

  • ์ •ํ™•์„ฑ์„ ๊นจ๋œจ๋ฆฌ์ง€ ์•Š์œผ๋ฉด์„œ ์ƒ์œ„ ํด๋ž˜์Šค์˜ ๊ฐ์ฒด๋ฅผ ํ•˜์œ„ ํด๋ž˜์Šค๋กœ ๋Œ€์ฒด ๊ฐ€๋Šฅํ•ด์•ผ ํ•จ

  • ์ž์‹ ํด๋ž˜์Šค๋Š” ๋ถ€๋ชจ ํด๋ž˜์Šค์˜ ๊ทœ์•ฝ ์œ„๋ฐ˜ ๊ธˆ์ง€

๋ชจ๋“  ๊ฒฐ์ œ ์ˆ˜๋‹จ์ด ํ™˜๋ถˆ ๊ฐ€๋Šฅํ•  ๊ฒƒ์ด๋ผ ๊ฐ€์ •ํ•˜๊ณ  ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ์„ค๊ณ„ํ–ˆ์œผ๋‚˜, ์ด๋ฒคํŠธ ๋ฌด๋ฃŒ ํฌ์ธํŠธ๋Š” ํ™˜๋ถˆ์ด ๋ถˆ๊ฐ€๋Šฅํ•œ ์ œ์•ฝ์ด ์žˆ๋‹ค๋ฉด LSP๋ฅผ ์œ„๋ฐ˜ํ•˜๊ฒŒ ๋œ๋‹ค.

spinner

ํ•˜์œ„ ํƒ€์ž…์ด ์ƒ์œ„ ํƒ€์ž…์˜ ๊ทœ์•ฝ์„ ์ค€์ˆ˜ํ•˜๋ฏ€๋กœ ์ฝ”๋“œ ๋ณ€๊ฒฝ ์‹œ ์˜ˆ๊ธฐ์น˜ ์•Š์€ ๋ถ€์ž‘์šฉ ๊ฐ์†Œํ•˜๊ฒŒ ๋œ๋‹ค.

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

์—ฌ๋Ÿฌ ๊ธฐ๋Šฅ์„ ํฌํ•จํ•œ ๋ฒ”์šฉ ์ธํ„ฐํŽ˜์ด์Šค ๋ณด๋‹จ ํŠน์ • ํด๋ผ์ด์–ธํŠธ๋ฅผ ์œ„ํ•œ ์ธํ„ฐํŽ˜์ด์Šค ์—ฌ๋Ÿฌ ๊ฐœ๋ฅผ ์ƒ์„ฑํ•˜๋Š” ๊ฒƒ์ด ์ข‹๋‹ค.

  • ์ธํ„ฐํŽ˜์ด์Šค๊ฐ€ ๋น„๋Œ€ํ•ด์ง€๋ฉด, ์ด๋ฅผ ๊ตฌํ˜„ํ•˜๋Š” ํด๋ž˜์Šค๋Š” ํ•„์š” ์—†๋Š” ๊ธฐ๋Šฅ๊นŒ์ง€ ๋ถˆํ•„์š”ํ•˜๊ฒŒ ๊ตฌํ˜„ ํ•„์š”

  • ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ๊ธฐ๋Šฅ๋ณ„๋กœ ์ชผ๊ฐœ๋ฉด ํด๋ผ์ด์–ธํŠธ๋Š” ๊ผญ ํ•„์š”ํ•œ ๊ธฐ๋Šฅ๋งŒ ์•Œ๋ฉด ๋˜๋ฏ€๋กœ ๊ฒฐํ•ฉ๋„ ๋‚ฎ์•„์ง

spinner

๋ถˆํ•„์š”ํ•œ ์˜์กด์„ฑ ์ œ๊ฑฐํ•˜๊ฒŒ ๋˜์–ด ์ธํ„ฐํŽ˜์ด์Šค๊ฐ€ ๋ณ€๊ฒฝ๋˜์–ด๋„ ์‚ฌ์šฉํ•˜์ง€ ์•Š๋Š” ํด๋ผ์ด์–ธํŠธ์—๋Š” ์˜ํ–ฅ์„ ์ฃผ์ง€ ์•Š๋Š”๋‹ค.

DIP: ์˜์กด ์—ญ์ „ ์›์น™(Dependency inversion principle)

๊ณ ์ˆ˜์ค€ ๋ชจ๋“ˆ์€ ์ €์ˆ˜์ค€ ๋ชจ๋“ˆ์— ์˜์กดํ•ด์„œ๋Š” ์•ˆ ๋˜๋ฉฐ, ๋‘˜ ๋‹ค ์ถ”์ƒํ™”์— ์˜์กดํ•˜์—ฌ ์˜์กด ๋ฐฉํ–ฅ์„ ์—ญ์ „์‹œ์ผœ์•ผ ํ•œ๋‹ค.

  • ๊ณ ์ˆ˜์ค€ ๋ชจ๋“ˆ(๋น„์ฆˆ๋‹ˆ์Šค ๋กœ์ง)์ด ์ €์ˆ˜์ค€ ๋ชจ๋“ˆ(์„ธ๋ถ€ ๊ตฌํ˜„ ํด๋ž˜์Šค)์„ ์ง์ ‘ ์ฐธ์กฐํ•˜๋ฉด ๊ฒฐํ•ฉ๋„๊ฐ€ ๋†’์•„์ง

  • ์ค‘๊ฐ„์— ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ๋‘์–ด, ์ €์ˆ˜์ค€ ๋ชจ๋“ˆ์ด ์ธํ„ฐํŽ˜์ด์Šค์— ์˜์กดํ•˜๊ฒŒ ๋งŒ๋“ฆ์œผ๋กœ์จ ์˜์กด ๋ฐฉํ–ฅ ์—ญ์ „

spinner

๊ตฌํ˜„์ฒด๊ฐ€ ๋ณ€๊ฒฝ๋˜์–ด๋„ ๊ณ ์ˆ˜์ค€ ๋ชจ๋“ˆ์€ ์˜ํ–ฅ์„ ๋ฐ›์ง€ ์•Š๊ฒŒ๋˜์–ด ์œ ์—ฐํ•œ ๊ต์ฒด๊ฐ€ ๊ฐ€๋Šฅํ•ด์ง„๋‹ค.

SOLID ์›์น™ ํ•ต์‹ฌ ์š”์•ฝ

์›์น™
ํ•ต์‹ฌ ํ‚ค์›Œ๋“œ
์ ์šฉ ํšจ๊ณผ

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

์ฑ…์ž„์˜ ๋ถ„๋ฆฌ

์‘์ง‘๋„๋Š” ๋†’์ด๊ณ  ๊ฒฐํ•ฉ๋„๋Š” ๋‚ฎ์ถ”์–ด ์ˆ˜์ • ๋ฒ”์œ„๋ฅผ ๋ช…ํ™•ํ•˜๊ฒŒ ํ•จ

OCP(๊ฐœ๋ฐฉ-ํ์‡„ ์›์น™)

์œ ์—ฐํ•œ ํ™•์žฅ

๊ธฐ์กด ์ฝ”๋“œ๋ฅผ ์ˆ˜์ •ํ•˜์ง€ ์•Š๊ณ  ๊ธฐ๋Šฅ์„ ํ™•์žฅํ•˜์—ฌ ํšŒ๊ท€ ๋ฒ„๊ทธ ๋ฐฉ์ง€

LSP(๋ฆฌ์Šค์ฝ”ํ”„ ์น˜ํ™˜ ์›์น™)

๊ทœ์•ฝ ์ค€์ˆ˜

ํ•˜์œ„ ํƒ€์ž…์ด ์ƒ์œ„ ๊ทœ์•ฝ์„ ์™„๋ฒฝํžˆ ์ค€์ˆ˜ํ•˜์—ฌ ๋‹คํ˜•์„ฑ์˜ ์•ˆ์ •์„ฑ ๋ณด์žฅ

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

์ธํ„ฐํŽ˜์ด์Šค ์ตœ์ ํ™”

๋ถˆํ•„์š”ํ•œ ์˜์กด์„ฑ์„ ์ œ๊ฑฐํ•˜์—ฌ ์ธํ„ฐํŽ˜์ด์Šค ๋ณ€๊ฒฝ ์‹œ ์˜ํ–ฅ ์ตœ์†Œํ™”

DIP(์˜์กด ์—ญ์ „ ์›์น™)

์˜์กด์„ฑ ์ฃผ์ž…

๊ตฌํ˜„์ฒด๊ฐ€ ์•„๋‹Œ ์ถ”์ƒํ™”์— ์˜์กดํ•˜์—ฌ ๋ถ€ํ’ˆ ๊ต์ฒดํ•˜๋“ฏ ์œ ์—ฐํ•œ ๋ณ€๊ฒฝ ๊ฐ€๋Šฅ

Last updated