์นดํ…Œ๊ณ ๋ฆฌ ์—†์Œ

[๋กœ๋“œ๋งต] ํด๋ฆฐ ์ฝ”๋“œ SOLID

sian han 2025. 5. 30. 14:04

๐ŸŽ“ ์ด ๊ธ€์€ ์ธํ”„๋Ÿฐ์—์„œ ์ œ๊ณตํ•˜๋Š” ๋ฐ•์šฐ๋นˆ๋‹˜์˜ "ํด๋ฆฐ ์ฝ”๋“œ & ํ…Œ์ŠคํŠธ ์ฝ”๋“œ ๊ฐ€์ด๋“œ ๋กœ๋“œ๋งต" ๊ฐ•์˜๋ฅผ ์ˆ˜๊ฐ•ํ•˜๋ฉด์„œ ์ •๋ฆฌํ•œ ๋‚ด์šฉ์„ ๋ฐ”ํƒ•์œผ๋กœ ์ž‘์„ฑํ•œ ๊ธ€์ž…๋‹ˆ๋‹ค.

https://www.inflearn.com/roadmaps/5699

 

ํด๋ฆฐ ์ฝ”๋“œ & ํ…Œ์ŠคํŠธ ์ฝ”๋“œ ๊ฐ€์ด๋“œ ๋กœ๋“œ๋งต ๋กœ๋“œ๋งต - ์ธํ”„๋Ÿฐ

Spring, TDD ์Šคํ‚ฌ์„ ํ•™์Šตํ•  ์ˆ˜ ์žˆ๋Š” ๋กœ๋“œ๋งต์„ ์ธํ”„๋Ÿฐ์—์„œ ๋งŒ๋‚˜๋ณด์„ธ์š”.

www.inflearn.com

 


 

SOLID

๊ฐ์ฒด์ง€ํ–ฅ ์„ค๊ณ„๋ฅผ ์ดํ•ดํ•˜๊ธฐ ์‰ฝ๊ณ  ์œ ์ง€๋ณด์ˆ˜ํ•˜๊ธฐ ์œ ์—ฐํ•˜๊ฒŒ ํ˜•ํƒœ๋กœ ํ•  ์ˆ˜ ์žˆ๋„๋ก ๋„์›€์„ ์ฃผ๋Š” 5๊ฐ€์ง€ ์›์น™

  • SRP : Single Responsibility Principle
  • OCP : Open-Closed Principle
  • LSP : Liskov Substitution Principle
  • ISP : Interface Segregation Principle
  • DIP : Dependenty Inversion Principle

 

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

ํ•˜๋‚˜์˜ ํด๋ž˜์Šค๊ฐ€ ํ•˜๋‚˜์˜ ์ฑ…์ž„๋งŒ ๊ฐ–๋„๋ก ์„ค๊ณ„๋ฅผ ํ•˜๋ผ๋Š” ์›์น™

  - ํ•˜๋‚˜์˜ ํด๋ž˜์Šค๊ฐ€ ๋ณ€๊ฒฝ ์ด์œ ๊ฐ€ ๋‘๊ฐ€์ง€๋ผ๋ฉด, ํ•ด๋‹น ํด๋ž˜์Šค์˜ ์ฑ…์ž„์€ 2๊ฐœ ์ด์ƒ์ธ ๊ฒƒ.

  - ๊ฐ์ฒด๊ฐ€ ๊ฐ€์ง„ ๊ณต๊ฐœ ๋ฉ”์„œ๋“œ, ํ•„๋“œ, ์ƒ์ˆ˜ ๋“ฑ์€ ํ•ด๋‹น ๊ฐ์ฒด์˜ ๋‹จ์ผ ์ฑ…์ž„์— ์˜ํ•ด์„œ๋งŒ ๋ณ€๊ฒฝ๋˜์–ด์•ผ ํ•จ

 

์ด์œ  : SRP ๋ฅผ ์ง€ํ‚ค๊ฒŒ ๋˜๋ฉด ๋†’์€ ์‘์ง‘๋„๋ฅผ ๊ฐ€์ง€๊ฒŒ ๋˜๊ณ  ๋‚ฎ์€ ๊ฒฐํ•ฉ๋„๋ฅผ ๊ฐ€์ง€๊ณ  ๋œ๋‹ค.

  - ์‘์ง‘๋„ : ํด๋ž˜์Šค๋‚˜ ๋ชจ๋“ˆ ๋‚ด์— ์š”์†Œ๋“ค์ด ๊ธด๋ฐ€ํ•˜๊ฒŒ ์—ฐ๊ด€๋˜์–ด ์žˆ๋Š” ์ •๋„

  - ๊ฒฐํ•ฉ๋„ : ๋‘๊ฐœ ์ด์ƒ์˜ ๊ฐ์ฒด๊ฐ€ ํ˜‘๋ ฅํ–ˆ์„ ๋•Œ ํ•œ ๊ฐ์ฒด๊ฐ€ ๋ณ€๊ฒฝ๋˜์—ˆ์„๋•Œ ๋‹ค๋ฅธ ๊ฐ์ฒด๋“ค์— ์˜ํ–ฅ์„ ๋ฏธ์น˜๋Š” ์ •๋„

 

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

ํ™•์žฅ์—๋Š” ์—ด๋ ค์žˆ๊ณ , ์ˆ˜์ •์—๋Š” ๋‹ซํ˜€ ์žˆ์–ด์•ผ ํ•œ๋‹ค.

  - ์ƒˆ๋กœ์šด ์š”๊ตฌ์‚ฌํ•ญ์ด ์ถ”๊ฐ€๋˜์—ˆ์„ ๋•Œ, ๊ธฐ์กด ์ฝ”๋“œ์˜ ๋ณ€๊ฒฝ ์—†์ด, ์‹œ์Šคํ…œ์˜ ๊ธฐ๋Šฅ์„ ํ™•์žฅํ•  ์ˆ˜ ์žˆ์–ด์•ผ ํ•œ๋‹ค.

์–ด๋–ป๊ฒŒ OCP ๋ฅผ ์ง€ํ‚ฌ ์ˆ˜ ์žˆ๋‚˜ ? >> ์ถ”์ƒํ™”์™€ ๋‹คํ˜•์„ฑ์„ ํ™œ์šฉํ•ด์„œ OCP ๋ฅผ ์ง€ํ‚ฌ ์ˆ˜ ์žˆ๋‹ค. 

 

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

๋ฆฌ์Šค์ฝ”ํ”„ : ๋ฐ”๋ฐ”๋ผ ๋ฆฌ์Šค์ฝ”ํ”„(์‚ฌ๋žŒ ์ด๋ฆ„)

์ƒ์† ๊ตฌ์กฐ์—์„œ ๋ถ€๋ชจ ํด๋ž˜์Šค์˜ ์ธ์Šคํ„ด์Šค๋ฅผ ์ž์‹ ํด๋ž˜์Šค์˜ ์ธ์Šคํ„ด์Šค๋กœ ์น˜ํ™˜ํ•  ์ˆ˜ ์žˆ์–ด์•ผ ํ•œ๋‹ค.

  - ์ž์‹ ํด๋ž˜์Šค๋Š” ๋ถ€๋ชจ ํด๋ž˜์Šค์˜ ์ฑ…์ž„์„ ์ค€์ˆ˜ํ•˜๋ฉฐ, ๋ถ€๋ชจ ํด๋ž˜์Šค์˜ ํ–‰๋™์„ ๋ณ€๊ฒฝํ•˜์ง€ ์•Š์•„์•ผ ํ•œ๋‹ค.

 

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

 

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

ํด๋ผ์ด์–ธํŠธ๋Š” ์ž์‹ ์ด ์‚ฌ์šฉํ•˜์ง€ ์•Š๋Š” ์ธํ„ฐํŽ˜์ด์Šค์— ์˜์กดํ•˜๋ฉด ์•ˆ๋œ๋‹ค. 

  - ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ์ž˜๊ฒŒ ์ชผ๊ฐœ๋Š” ๊ฒƒ์ด ๊ถŒ์žฅ๋จ(=๊ธฐ๋Šฅ๋‹จ์œ„๋กœ ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ์ž˜๊ฒŒ ๋‚˜๋ˆ„์–ด ์‚ฌ์šฉํ•ด๋ผ)

 

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

 

์˜์กด์„ฑ ์—ญ์ „ ์›์น™ : DIP : Dependenty Inversion Principle

์ƒ์œ„ ์ˆ˜์ค€์˜ ๋ชจ๋“ˆ์€ ํ•˜์œ„ ์ˆ˜์ค€์˜ ๋ชจ๋“ˆ์— ์˜์กดํ•ด์„œ๋Š” ์•ˆ๋˜๊ณ , ๋‘˜ ๋ชจ๋‘ ์ถ”์ƒํ™”์— ์˜์กดํ•ด์•ผ ํ•œ๋‹ค๋Š” ์›์น™ (= ์ถ”์ƒํ™” ๋ ˆ๋ฒจ์ด ๋†’์€ ์ชฝ์˜ ๋ชจ๋“ˆ์ด ๊ตฌ์ฒด ์ชฝ์— ๊ฐ€๊นŒ์šด ๋ชจ๋“ˆ์— ์ง์ ‘์ ์œผ๋กœ ์˜์กดํ•ด์„œ๋Š” ์•ˆ๋œ๋‹ค. ๋ชจ๋‘ ์ถ”์ƒํ™”์— ์˜์กดํ•˜์ž)

  - ์˜์กด์„ฑ์˜ ์ˆœ๋ฐฉํ–ฅ : ๊ณ ์ˆ˜์ค€ ๋ชจ๋“ˆ์ด ์ €์ˆ˜์ค€ ๋ชจ๋“ˆ์„ ์ฐธ์กฐํ•˜๋Š” ๊ฒƒ

  - ์˜์กด์„ฑ์˜ ์—ญ๋ฐฉํ–ฅ : ๊ณ ์ˆ˜์ค€, ์ €์ˆ˜์ค€ ๋ชจ๋“ˆ์ด ๋ชจ๋‘ ์ถ”์ƒํ™”์— ์˜์กดํ•˜๋Š” ๊ฒƒ

    - ์˜์กด์„ฑ : ํ•˜๋‚˜์˜ ๋ชจ๋“ˆ์ด ๋‹ค๋ฅธ ํ•˜๋‚˜์˜ ๋ชจ๋“ˆ์„ ์ฐธ์กฐํ•˜๊ฑฐ๋‚˜, ์ง์ ‘์ ์œผ๋กœ ์ƒ์„ฑํ•˜๊ฑฐ๋‚˜, ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ

  - ์ €์ˆ˜์ค€ ๋ชจ๋“ˆ์ด ๋ณ€๊ฒฝ๋˜์–ด๋„, ๊ณ ์ˆ˜์ค€ ๋ชจ๋“ˆ์—๋Š” ์˜ํ–ฅ์ด ๊ฐ€์ง€ ์•Š๋Š”๋‹ค. 

 

์ด์œ  : ์ €์ˆ˜์ค€ ๋ชจ๋“ˆ์€ ์ž์ฃผ ๋ณ€๊ฒฝ๋˜๋Š”๋ฐ, DIP ์›์น™์„ ์ง€ํ‚ค๋ฉด ์ €์ˆ˜์ค€ ๋ชจ๋“ˆ์ด ์ž์œ ๋กญ๊ฒŒ ๋ณ€๊ฒฝ๋˜์–ด๋„ ๊ณ ์ˆ˜์ค€ ๋ชจ๋“ˆ์—๋Š” ์˜ํ–ฅ์ด ๊ฐ€์ง€ ์•Š๋Š”๋‹ค.