SOLID

SOLID๋ž€?

ํด๋ฆฐ์ฝ”๋“œ๋กœ ์œ ๋ช…ํ•œ ๋กœ๋ฒ„ํŠธ ๋งˆํ‹ด์ด ์ข‹์€ ๊ฐ์ฒด ์ง€ํ–ฅ ์„ค๊ณ„์˜ 5๊ฐ€์ง€ ์›์น™์„ ์ •๋ฆฌํ•œ ๊ฒƒ์ด๋‹ค.
  1. SRP : ๋‹จ์ผ ์ฑ…์ž„ ์›์น™
  2. OCP : ๊ฐœ๋ฐฉ-ํ์‡„ ์›์น™
  3. LSP : ๋ฆฌ์Šค์ฝ”ํ”„ ์น˜ํ™˜ ์›์น™
  4. ISP : ์ธํ„ฐํŽ˜์ด์Šค ๋ถ„๋ฆฌ ์›์น™
  5. DIP : ์˜์กด๊ด€๊ณ„ ์—ญ์ „ ์›์น™

SRP(Single Responsibility Principle)

  1. ํ•œ ํด๋ž˜์Šค๋Š” ํ•˜๋‚˜์˜ ์ฑ…์ž„๋งŒ ๊ฐ€์ ธ์•ผ ํ•œ๋‹ค.
  2. ์ค‘์š”ํ•œ ๊ธฐ์ค€์€ ๋ณ€๊ฒฝ, ๋ณ€๊ฒฝ์ด ์žˆ์„ ๋•Œ ํ•˜๋‚˜์˜ ํด๋ž˜์Šค๋งŒ ๋ณ€๊ฒฝ๋˜๋ฉด ๊ต‰์žฅํžˆ ์ž˜ ์ง€ํ‚จ ๊ฒƒ์ด๋‹ค.

→ ํ•˜๋‚˜์˜ ํด๋ž˜์Šค ์•ˆ์— DB, SQL ์ฟผ๋ฆฌ๋ฌธ, View ๋กœ์ง ...... ์œ ์ง€๋ณด์ˆ˜ ์ธก๋ฉด์—์„œ ์ตœ์•…์ด๋‹ค.

OCP(Open/closed principle)

  1. ์†Œํ”„ํŠธ์›จ์–ด ์š”์†Œ๋Š” ํ™•์žฅ์—๋Š” ์—ด๋ ค ์žˆ์œผ๋‚˜ ๋ณ€๊ฒฝ์—๋Š” ๋‹ซํ˜€ ์žˆ์–ด์•ผ ํ•œ๋‹ค.
  2. ๋งŒ์•ฝ ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ๋งŒ๋“ค์–ด ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ๊ตฌํ˜„ํ•˜๋Š” ๊ตฌํ˜„์ฒด๋ฅผ ๋งŒ๋“ ๋‹ค๋ฉด? (๋‹คํ˜•์„ฑ)
  3. ์—ญํ• ๊ณผ ๊ตฌํ˜„์˜ ๋ถ„๋ฆฌ๋ฅผ ์ƒ๊ฐํ•ด๋ณด์ž.

→ ๊ธฐ์กด ์ฝ”๋“œ๋Š” ๋ณ€๊ฒฝ๋˜์ง€ ์•Š๊ณ , ์ƒˆ๋กœ์šด ๊ธฐ๋Šฅ์„ ํ™•์žฅ์‹œํ‚ฌ ์ˆ˜ ์žˆ๋‹ค.

LSP(Liskov Substitution Principle)

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

ISP(Interface Segregation Principle)

  1. ํŠน์ • ํด๋ผ์ด์–ธํŠธ๋ฅผ ์œ„ํ•œ ์ธํ„ฐํŽ˜์ด์Šค ์—ฌ๋Ÿฌ ๊ฐœ๊ฐ€ ๋ฒ”์šฉ ์ธํ„ฐํŽ˜์ด์Šค ํ•˜๋‚˜๋ณด๋‹ค ๋‚ซ๋‹ค.
  2. ๋งŒ์•ฝ ์ž๋™์ฐจ ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ์šด์ „, ์ •๋น„ ์ธํ„ฐํŽ˜์ด์Šค๋กœ ๋ถ„๋ฆฌํ•˜๊ณ  ์‚ฌ์šฉ์ž ํด๋ผ์ด์–ธํŠธ๋ฅผ ์šด์ „์ž, ์ •๋น„์‚ฌ ํด๋ผ์ด์–ธํŠธ๋กœ ๋ถ„๋ฆฌํ•˜๊ฒŒ ๋œ๋‹ค๋ฉด ์ •๋น„ ์ธํ„ฐํŽ˜์ด์Šค๊ฐ€ ๋ณ€๊ฒฝ๋œ๋‹ค ํ•ด๋„ ์šด์ „์ž ํด๋ผ์ด์–ธํŠธ์— ์˜ํ–ฅ์„ ์ฃผ์ง€ ์•Š๋Š”๋‹ค.
  3. ์ธํ„ฐํŽ˜์ด์Šค๊ฐ€ ๋ช…ํ™•ํ•ด์ง€๊ณ , ๋Œ€์ฒด ๊ฐ€๋Šฅ์„ฑ์ด ๋†’์•„์ง„๋‹ค.

DIP(Dependency Inversion Principle)

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

 

๋‹คํ˜•์„ฑ๊ณผ SOLID

MemberRepository memberRepository = new JDBCMemberRepository();
  1. ๋‹คํ˜•์„ฑ๋งŒ์œผ๋กœ๋Š” ๊ตฌํ˜„ ๊ฐ์ฒด๋ฅผ ๋ณ€๊ฒฝํ•  ๋•Œ ํด๋ผ์ด์–ธํŠธ ์ฝ”๋“œ๊ฐ€ ๋ณ€๊ฒฝ๋  ์ˆ˜ ๋ฐ–์— ์—†๋‹ค.
  2. ๋‹คํ˜•์„ฑ๋งŒ์œผ๋กœ๋Š” ๊ตฌ์ฒดํ™”์— ์˜์กดํ•  ์ˆ˜ ๋ฐ–์— ์—†๋‹ค. 

(OCP. DIP ์œ„๋ฐ˜)

 

Spring๊ณผ OCP, DIP 

  1. Spring์„ ํ™œ์šฉํ•˜๋ฉด OCP, DIP๋ฅผ ์ง€ํ‚ฌ ์ˆ˜ ์žˆ๋‹ค. 
  2. DI ์ปจํ…Œ์ด๋„ˆ๋ฅผ ์ œ๊ณตํ•˜๊ธฐ ๋•Œ๋ฌธ์—, ์œ„์˜ ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•  ์ˆ˜ ์žˆ๋Š” ๊ฒƒ์ด๋‹ค.