๊ฐœ๋ฐœ์„œ์ 

[ํด๋ฆฐ ์•„ํ‚คํ…์ฒ˜] 3๋ถ€. ์„ค๊ณ„ ์›์น™

GaGah 2022. 1. 12. 22:26

์ถœ์ฒ˜ : yes24

๐ŸŽฏ  ์„ค๊ณ„ ์›์น™ 

  1. SRP(Single Responsibility Principle) : ๋‹จ์ผ ์ฑ…์ž„ ์›์น™ 
  2. OCP(Open-Closed Principle) : ๊ฐœ๋ฐฉ-ํ์‡„ ์›์น™
  3. LSP(Liskov Substitution Principle) : ๋ฆฌ์Šค์ฝ”ํ”„ ์น˜ํ™˜ ์›์น™
  4. ISP(Interface Segregation Principle) : ์ธํ„ฐํŽ˜์ด์Šค ๋ถ„๋ฆฌ ์›์น™
  5. DIP(Dependency Inversion Principle) : ์˜์กด์„ฑ ์—ญ์ „ ์›์น™

 

 


โ— SRP : ๋‹จ์ผ ์ฑ…์ž„ ์›์น™

ํ•˜๋‚˜์˜ ๋ชจ๋“ˆ์€ ์˜ค์ง ํ•˜๋‚˜์˜ ์•กํ„ฐ์— ๋Œ€ํ•ด์„œ๋งŒ ์ฑ…์ž„์ ธ์•ผ ํ•œ๋‹ค.
๋ชจ๋“ˆ์ด๋ž€? 
 - ๋‹จ์ˆœํ•œ ์ •์˜๋กœ ์†Œ์Šค ํŒŒ์ผ

 

์ง•ํ›„1) ์šฐ๋ฐœ์  ์ค‘๋ณต

Employee๋ผ๋Š” ํด๋ž˜์Šค ์•ˆ์— calculatePay, reportHours, save ๋ฉ”์„œ๋“œ๊ฐ€ 3๋ช…์˜ ์•กํ„ฐ๋ฅผ ์ฑ…์ž„์ง„๋‹ค.

์ฆ‰, ๋‹จ์ผ ํด๋ž˜์Šค์— ์„ธ ์•กํ„ฐ๊ฐ€ ๊ฒฐํ•ฉ๋˜์–ด ์žˆ๋‹ค.

  • calculatePay() : ํšŒ๊ณ„ํŒ€์—์„œ ๊ธฐ๋Šฅ์„ ์ •์˜ํ•˜๋ฉฐ, CFO ๋ณด๊ณ ๋ฅผ ์œ„ํ•ด ์‚ฌ์šฉํ•œ๋‹ค.
  • reportHours() : ์ธ์‚ฌํŒ€์—์„œ ๊ธฐ๋Šฅ์„ ์ •์˜ํ•˜๊ณ  ์‚ฌ์šฉํ•˜๋ฉฐ, COO ๋ณด๊ณ ๋ฅผ ์œ„ํ•ด ์‚ฌ์šฉํ•œ๋‹ค.
  • save() : ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ๊ด€๋ฆฌ์ž๊ฐ€ ์ •์˜

 

๋ฌธ์ œ ์ƒํ™ฉ!!

-> regularHours() : ์ดˆ๊ณผ ๊ทผ๋ฌด๋ฅผ ์ œ์™ธํ•œ ์—…๋ฌด ์‹œ๊ฐ„์„ ๊ณ„์‚ฐํ•˜๋Š” ์•Œ๊ณ ๋ฆฌ์ฆ˜

  • calculatePay() ์™€ reportHours() ๊ฐ๊ฐ์˜ ๋ฉ”์†Œ๋“œ์—์„œ regularHours()๋ฅผ ์‚ฌ์šฉ
  • calculatePay()์—์„œ ์—…๋ฌด์‹œ๊ฐ„ ๊ณ„์‚ฐ์˜ ๋ณ€๊ฒฝ์„ ์œ„ํ•ด regularHours()๋ฉ”์†Œ๋“œ๋ฅผ ๋ณ€๊ฒฝํ•˜๋ฉด, calculatePay๋„ ์˜ํ–ฅ์ด ๊ฐ„๋‹ค.
  • ๊ฐœ๋ฐœ์ž๊ฐ€ regularHours()๋ฅผ ๋ณ€๊ฒฝํ•  ๋•Œ, calculatePay()๋„ regularHours()๋ฅผ ํ˜ธ์ถœํ•˜๊ณ  ์žˆ๋Š” ๊ฒƒ์„ ์•Œ๊ณ  ์žˆ์„๊นŒ? -> ๋ชจ๋ฅธ๋‹ค.
  • ์ด ๋ชจ๋“  ๊ฒƒ์€ ์„œ๋กœ ๋‹ค๋ฅธ ์•กํ„ฐ๊ฐ€ ์˜์กดํ•˜๋Š” ์ฝ”๋“œ๋ฅผ ๋„ˆ๋ฌด ๊ฐ€๊นŒ์ด ๋ฐฐ์น˜ํ–ˆ๊ธฐ ๋•Œ๋ฌธ. -> ์ฝ”๋“œ ๋ถ„๋ฆฌ ํ•„์š”

 

์ง•ํ›„2) ๋ณ‘ํ•ฉ

์†Œ์Šค ํŒŒ์ผ์— ๋‹ค์–‘ํ•˜๊ณ  ๋งŽ์€ ๋ฉ”์„œ๋“œ๋ฅผ ํฌํ•จํ•˜๋ฉด ๋ณ‘ํ•ฉ์ด ์ž์ฃผ ๋ฐœ์ƒํ•œ๋‹ค.

๋ณ€๊ฒฝ์‚ฌํ•ญ์ด ์ƒ๊ฒจ CTO๊ฐœ๋ฐœ์ž๊ฐ€ Employee ERD๋ฅผ ๋ณ€๊ฒฝ์‹œํ‚ค๊ณ , ์ด์™€ ๋™์‹œ์— COOํŒ€์—์„œ ๋ณด๊ณ ์„œ format์„ ๋ณ€๊ฒฝํ–ˆ๋‹ค๊ณ  ์ƒ๊ฐํ•ด๋ณด์ž.

CTOํŒ€๊ณผ COOํŒ€์€ ์›๋ณธ A๋ฅผ pull ๋ฐ›์•„ ๋ณ€๊ฒฝํ•˜๊ณ , ์ ์šฉํ•˜๋ ค ํ• ํ…๋ฐ ๋ณ€๊ฒฝ์‚ฌํ•ญ๋“ค์„ ์„œ๋กœ ์ถฉ๋Œํ•œ๋‹ค. 

์ด๋Ÿฌํ•œ ๋ณ‘ํ•ฉ์—๋Š” ํ•ญ์ƒ ์œ„ํ—˜์ด ๋”ฐ๋ฅธ๋‹ค.  

 

ํ•ด๊ฒฐ์ฑ… 

- ๋ฉ”์„œ๋“œ๋ฅผ ๊ฐ๊ธฐ ๋‹ค๋ฅธ ํด๋ž˜์Šค๋กœ ์ด๋™์‹œํ‚ค๋Š” ๋ฐฉ์‹.
- ๋ฐ์ดํ„ฐ์™€ ๋ฉ”์„œ๋“œ๋ฅผ ๋ถ„๋ฆฌ์‹œํ‚ค๋Š” ๋ฐฉ์‹

 

์œ„์˜ ์˜ˆ์‹œ์˜ ํ•ด๊ฒฐ์ฑ…์œผ๋กœ, ๊ฐ„๋‹จํ•œ ๋ฐ์ดํ„ฐ ๊ตฌ์กฐ์ธ EmployeeData ํด๋ž˜์Šค๋ฅผ ๋งŒ๋“ค์–ด ์„ธ ๊ฐœ์˜ ํด๋ž˜์Šค๊ฐ€ ๊ณต์œ ํ•˜๋„๋ก ํ•˜์ž.

  • ์„ธ ํด๋ž˜์Šค๋Š” ์„œ๋กœ์˜ ์กด์žฌ๋ฅผ ๋ชฐ๋ผ์•ผ ํ•œ๋‹ค. ๋”ฐ๋ผ์„œ "์šฐ์—ฐํ•œ ์ค‘๋ณต"์„ ํ”ผํ•  ์ˆ˜ ์žˆ๋‹ค. 

 

๋ฐ˜๋ฉด, ์ด ํ•ด๊ฒฐ์ฑ…์€ ๊ฐœ๋ฐœ์ž๊ฐ€ ์„ธ ๊ฐ€์ง€ ํด๋ž˜์Šค๋ฅผ ์ธ์Šคํ„ด์Šคํ™”ํ•˜๊ณ  ์ถ”์ ํ•ด์•ผ ํ•œ๋‹ค๋Š” ๊ฒŒ ๋‹จ์ ์ด๋‹ค.

์ด๋Ÿฐ ๋‚œ๊ด€์—์„œ ๋น ์ ธ๋‚˜์˜ค๊ธฐ ์œ„ํ•ด, ํผ์‚ฌ๋“œ ํŒจํ„ด ์ด ์กด์žฌ.

  • Facadeํด๋ž˜์Šค์— ์ฝ”๋“œ๋Š” ๊ฑฐ์˜ ์—†๋‹ค.
  • ์„ธ ํด๋ž˜์Šค์˜ ๊ฐ์ฒด๋ฅผ ์ƒ์„ฑํ•˜๊ณ , ์š”์ฒญ๋œ ๋ฉ”์„œ๋“œ๋ฅผ ๊ฐ€์ง€๋Š” ๊ฐ์ฒด๋กœ ์œ„์ž„ํ•˜๋Š” ์ผ์„ ์ฑ…์ž„์ง„๋‹ค. 

++ Facadeํด๋ž˜์Šค๋Š” ๋‚ด๋ถ€ ์„œ๋ธŒ์‹œ์Šคํ…œ์˜ ๋‚ด๋ถ€๋ฅผ ์•Œ์ง€ ์•Š์•„๋„ Facadeํด๋ž˜์Šค์˜ ๋ฉ”์†Œ๋“œ๋ฅผ ํ˜ธ์ถœํ•˜๋ฉด ํ•ด๋‹น API๋ฅผ ์ œ๊ณตํ•  ์ˆ˜ ์žˆ๋„๋ก ๋งŒ๋“ค์–ด์ฃผ๋Š” ์—ญํ• ์„ ํ•œ๋‹ค. (๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์˜ ์—ญํ• ์ด๋ผ๊ณ  ๋ณด๋ฉด ์ดํ•ดํ•˜๊ธฐ ์‰ฝ๋‹ค.)

 

ํผ์‚ฌ๋“œ ํŒจํ„ด ์ถœ์ฒ˜ : https://jusungpark.tistory.com/23

 

์–ด๋–ค ๊ฐœ๋ฐœ์ž๋Š” ๊ฐ€์žฅ ์ค‘์š”ํ•œ ์—…๋ฌด ๊ทœ์น™์„ ๋ฐ์ดํ„ฐ์™€ ๊ฐ€๊น๊ฒŒ ๋ฐฐ์น˜ํ•˜๋Š” ๋ฐฉ์‹์„ ์„ ํ˜ธํ•˜๋Š”๋ฐ, 

์ด ๊ฒฝ์šฐ์—๋Š” ๊ฐ€์žฅ ์ค‘์š”ํ•œ ๋ฉ”์„œ๋“œ๋Š” ๊ธฐ์กด์˜ Employeeํด๋ž˜์Šค์— ๊ทธ๋Œ€๋กœ ์œ ์ง€ํ•˜๋˜, ๋œ ์ค‘์š”ํ•œ ๋‚˜๋จธ์ง€ ๋ฉ”์„œ๋“œ๋“ค์— ๋Œ€ํ•œ ํผ์‚ฌ๋“œ๋กœ ์‚ฌ์šฉํ•  ์ˆ˜๋„ ์žˆ๋‹ค.

 

 

 

โ— OCP : ๊ฐœ๋ฐฉ-ํ์‡„ ์›์น™

์†Œํ”„ํŠธ์›จ์–ด ๊ฐœ์ฒด๋Š” ํ™•์žฅ์—๋Š” ์—ด๋ ค ์žˆ์–ด์•ผ ํ•˜๊ณ , ๋ณ€๊ฒฝ์—๋Š” ๋‹ซํ˜€ ์žˆ์–ด์•ผ ํ•œ๋‹ค.
์ฆ‰, ๊ฐœ์ฒด์˜ ํ–‰์œ„๋Š” ํ™•์žฅํ•  ์ˆ˜ ์žˆ์–ด์•ผ ํ•˜์ง€๋งŒ, ๋ณ€๊ฒฝํ•ด์„œ๋Š” ์•ˆ๋œ๋‹ค. 

์˜ˆ์‹œ)  ์žฌ๋ฌด์ œํ‘œ๋ฅผ ์›น ํŽ˜์ด์ง€๋กœ ๋ณด์—ฌ์ฃผ๋Š” ์‹œ์Šคํ…œ์ด ์žˆ๋Š”๋ฐ, "ํ”„๋ฆฐํŠธ ์ถœ๋ ฅ ๊ธฐ๋Šฅ"์ด ์ถ”๊ฐ€๋˜์—ˆ๋‹ค๊ณ  ์ƒ๊ฐํ•ด๋ณด์ž.

์–ผ๋งˆ๋‚˜ ๋งŽ์€ ์ฝ”๋“œ๋ฅผ ์ˆ˜์ •ํ•ด์•ผํ• ๊นŒ?

  • ์†Œํ”„ํŠธ์›จ์–ด ์•„ํ‚คํ…์ฒ˜๊ฐ€ ํ›Œ๋ฅญํ•˜๋‹ค๋ฉด, ๋ณ€๊ฒฝ๋˜๋Š” ์ฝ”๋“œ์˜ ์–‘์ด ๊ฐ€๋Šฅํ•œ ํ•œ ์ตœ์†Œํ™”๋  ๊ฒƒ์ด๋‹ค. (์ด์ƒ์ ์ธ ๋ณ€๊ฒฝ๋Ÿ‰์€ 0)

 

์–ด๋–ป๊ฒŒ ํ•˜๋ฉด ์ตœ์†Œํ™” ์‹œํ‚ฌ ์ˆ˜ ์žˆ์„๊นŒ? 

  • ๋ณด๊ณ ์„œ์šฉ ๋ฐ์ดํ„ฐ ๊ณ„์‚ฐ ์ฑ…์ž„, ์›น/ํ”„๋ฆฐํŠธ ํ˜•ํƒœ๋กœ ํ‘œํ˜„ํ•˜๋Š” ์ฑ…์ž„, ๋‘ ๊ฐœ์˜ ์ฑ…์ž„์œผ๋กœ ๋ถ„๋ฆฌ์‹œํ‚ค์ž.
  • ๋‘ ์ฑ…์ž„ ์ค‘ ํ•˜๋‚˜์—์„œ ๋ณ€๊ฒฝ์ด ๋ฐœ์ƒํ•˜๋”๋ผ๋„ ๋‹ค๋ฅธ ํ•˜๋‚˜๋Š” ๋ณ€๊ฒฝ๋˜์ง€ ์•Š๋„๋ก ์†Œ์Šค์ฝ”๋“œ ์˜์กด์„ฑ์„ ํ™•์‹คํžˆ ์กฐ์งํ™”ํ•ด์•ผํ•œ๋‹ค. 
  • ์œ„์˜ ๋ชฉ์ ์„ ๋‹ฌ์„ฑํ•˜๊ธฐ ์œ„ํ•ด์„œ๋Š” ์ฒ˜๋ฆฌ ๊ณผ์ •์„ ํด๋ž˜์Šค ๋‹จ์œ„๋กœ ๋ถ„ํ• ํ•˜๊ณ , ํด๋ž˜์Šค๋Š” ์ปดํฌ๋„ŒํŠธ ๋‹จ์œ„๋กœ ๋ถ„๋ฆฌํ•œ๋‹ค. 
    • ์ปดํฌ๋„ŒํŠธ : Controller, Interactor, Presenter, Database, View

 

  • ์ฃผ๋ชฉํ•  ์  1 : ๋ชจ๋“  ์˜์กด์„ฑ์ด ์†Œ์Šค ์ฝ”๋“œ ์˜์กด์„ฑ์„ ๋‚˜ํƒ€๋‚ธ๋‹ค.
    • ํ™”์‚ดํ‘œ๊ฐ€ A ํด๋ž˜์Šค์—์„œ B ํด๋ž˜์Šค๋กœ ํ–ฅํ•œ๋‹ค๋ฉด, A ํด๋ž˜์Šค์—์„œ๋Š” Bํด๋ž˜์Šค๋ฅผ ํ˜ธ์ถœํ•˜์ง€๋งŒ, Bํด๋ž˜์Šค์—์„œ๋Š” Aํด๋ž˜์Šค๋ฅผ ์ „ํ˜€ ํ˜ธ์ถœํ•˜์ง€ ์•Š์Œ.
  • ์ฃผ๋ชฉํ•  ์  2 : ์ด์ค‘์„ ์€ ํ™”์‚ดํ‘œ์™€ ์˜ค์ง ํ•œ ๋ฐฉํ–ฅ์œผ๋กœ๋งŒ ๊ต์ฐจํ•œ๋‹ค.
    • ๋ชจ๋“  ์ปดํฌ๋„ŒํŠธ ๊ด€๊ณ„๋Š” ๋‹จ๋ฐฉํ–ฅ์œผ๋กœ ์ด๋ฃจ์–ด์ง„๋‹ค๋Š” ๋œป. (์ฆ‰, ๋ณ€๊ฒฝ์œผ๋กœ๋ถ€ํ„ฐ ๋ณดํ˜ธํ•˜๋ ค๋Š” ์ปดํฌ๋„ŒํŠธ๋ฅผ ํ–ฅํ•˜๋„๋ก ๊ทธ๋ ค์ง„๋‹ค.)
    • A์ปดํฌ๋„ŒํŠธ์—์„œ ๋ฐœ์ƒ๋œ ๋ณ€๊ฒฝ์œผ๋กœ๋ถ€ํ„ฐ B ์ปดํฌ๋„ŒํŠธ๋ฅผ ๋ณดํ˜ธํ•˜๋ ค๋ฉด ๋ฐ˜๋“œ์‹œ A ์ปดํฌ๋„ŒํŠธ๊ฐ€ B์ปดํฌ๋„ŒํŠธ์— ์˜์กดํ•ด์•ผ ํ•œ๋‹ค.
    • ์˜ˆ์ œ) Presenter์—์„œ ๋ฐœ์ƒํ•œ ๋ณ€๊ฒฝ์œผ๋กœ๋ถ€ํ„ฐ Controller๋ฅผ ๋ณดํ˜ธํ•˜๊ณ ์ž ํ•œ๋‹ค. 
  • ์™œ Interactor๋Š” OCP๋ฅผ ๊ฐ€์žฅ ์ž˜ ์ค€์ˆ˜ํ•  ์ˆ˜ ์žˆ๋Š” ๊ณณ์— ์œ„์น˜ํ•˜๋‚˜? 
    • Interactor๊ฐ€ ์—…๋ฌด ๊ทœ์น™์„ ํฌํ•จํ•˜๊ธฐ ๋•Œ๋ฌธ.
    • ๊ฐ€์žฅ ๋†’์€ ์ˆ˜์ค€์˜ ์ •์ฑ…์„ ํฌํ•จํ•˜๊ธฐ ๋•Œ๋ฌธ.
    • ์ด๋ ‡๊ฒŒ, ๋†’์€ ์ˆ˜์ค€(์ค‘์‹ฌ์ ์ธ ๋ฌธ์ œ-ex.Interactor)์ผ์ˆ˜๋ก ๋ณดํ˜ธ๋ฅผ ๋ฐ›๊ณ , ๋‚ฎ์€ ์ˆ˜์ค€(View)์ผ์ˆ˜๋ก ๋ณดํ˜ธ๋ฅผ ๋ฐ›์ง€ ๋ชปํ•œ๋‹ค. 

Interface์˜ ๋ชฉ์ 

1. ๋ฐฉํ–ฅ์„ฑ ์ œ์–ด

  • FanancialDataGateway ์ธํ„ฐํŽ˜์ด์Šค๋Š” ์˜์กด์„ฑ์„ ์—ญ์ „์‹œํ‚ค๊ธฐ ์œ„ํ•ด ์‚ฌ์šฉ

2. ์ •๋ณด์€๋‹‰

  • FanancialReportRequester ์ธํ„ฐํŽ˜์ด์Šค๋Š” Controller๊ฐ€ Interactor ๋‚ด๋ถ€์— ๋Œ€ํ•ด ๋„ˆ๋ฌด ๋งŽ์ด ์•Œ์ง€ ๋ชปํ•˜๋„๋ก ๋ง‰๊ธฐ ์œ„ํ•ด์„œ ์กด์žฌ. 

๊ฒฐ๋ก 

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

 

โ— LSP : ๋ฆฌ์Šค์ฝ”ํ”„ ์น˜ํ™˜ ์›์น™

๋ฆฌ์Šค์ฝ”ํ”„ ์น˜ํ™˜ ์›์น™ 
Sํƒ€์ž…์˜ ๊ฐ์ฒด o1, Tํƒ€์ž…์˜ ๊ฐ์ฒด o2๊ฐ€ ์žˆ๋‹ค๊ณ  ํ•ด๋ณด์ž. o2์ž๋ฆฌ์— o1์„ ์น˜ํ™˜ํ•˜๋”๋ผ๋„ ๋ฌธ์ œ๊ฐ€ ์—†๋‹ค๋ฉด, S๋Š” T์˜ ํ•˜์œ„ ํƒ€์ž…์ด๋‹ค. 

์ƒ์†์„ ์‚ฌ์šฉํ•˜๋„๋ก ๊ฐ€์ด๋“œํ•˜๊ธฐ

  • License(Interface) ์˜ ๋‘ ๊ฐ€์ง€ ํ•˜์œ„ํƒ€์ž…
    • Personal License
    • Business License

-> Personal License์™€ Business License๋Š” ๋ชจ๋‘ License ํƒ€์ž…์„ ์น˜ํ™˜ํ•  ์ˆ˜ ์žˆ๋‹ค.

 

์ •์‚ฌ๊ฐํ˜•/์ง์‚ฌ๊ฐํ˜• ๋ฌธ์ œ

์ถœ์ฒ˜ : https://uchanlee.dev/clean-architecture/book/ch9/

User๋Š” Rectangle์„ ๋ฐ”๋ผ๋ณด๊ณ  ์žˆ๊ณ , Sqare๋Š” width, height๋ฅผ ๋…๋ฆฝ์ ์œผ๋กœ ๋ฐ”๊ฟ€ ์ˆ˜ ์—†๊ธฐ ๋•Œ๋ฌธ์— Rectangle์˜ ํ•˜์œ„ํƒ€์ž…์œผ๋กœ๋Š” ์ ํ•ฉํ•˜์ง€ ์•Š๋‹ค. ๊ฒฐ๊ตญ ์ด ์„ค๊ณ„๋Š” User์—๊ฒŒ ํ˜ผ๋™์„ ์ผ์œผํ‚จ๋‹ค.

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

 

LSP์™€ ์•„ํ‚คํ…์ฒ˜

์ดˆ์ฐฝ๊ธฐ LSP๋Š” ์ƒ์†์„ ์‚ฌ์šฉํ•˜๋„๋ก ๊ฐ€์ด๋“œํ•˜๋Š” ์ •๋„๋กœ๋งŒ ๊ฐ„์ฃผ๋˜์—ˆ์ง€๋งŒ, ์‹œ๊ฐ„์ด ์ง€๋‚˜๋ฉด์„œ ์ธํ„ฐํŽ˜์ด์Šค/๊ตฌํ˜„์ฒด์—๋„ ์ ์šฉ๋˜๋Š” ๊ด‘๋ฒ”์œ„ํ•œ ์†Œํ”„ํŠธ์›จ์–ด ์„ค๊ณ„ ์›์น™์œผ๋กœ ๋ณ€ํ•ด์™”๋‹ค.

LSP๋ฅผ ์ดํ•ดํ•˜๋Š” ์ตœ์„ ์˜ ๋ฐฉ๋ฒ•์€ ์›์น™์„ ์–ด๊ฒผ์„ ๋•Œ ์‹œ์Šคํ…œ ์•„ํ‚คํ…์ฒ˜์—์„œ ๋ฌด์Šจ ์ผ์ด ์ผ์–ด๋‚˜๋Š”์ง€ ๊ด€์ฐฐํ•˜๋Š” ๊ฒƒ์ด๋‹ค.

 

LSP ์œ„๋ฐฐ ์‚ฌ๋ก€

์นด์นด์˜คT์—์„œ ํƒ์‹œ ์—…์ฒด๋“ค์„ ๋ฐฐ์ฐจ ๋ฐ ์ˆ˜๋ฝ ์„œ๋น„์Šค๋ฅผ ๋งŒ๋“ค๋•Œ, "pickupAddress", "pickupTime", "destination"์„ ์‚ฌ์šฉํ•˜์—ฌ ๋™์ผํ•œ ๋ฐฉ์‹์œผ๋กœ ๋กœ์ง์„ ์ฒ˜๋ฆฌํ–ˆ๋‹ค๊ณ  ๊ฐ€์ •ํ•ด๋ณด์ž. 

๊ทธ๋Ÿฐ๋ฐ, ์„œ์šธํƒ์‹œ์—์„œ ์ด ์„œ๋น„์Šค ์‚ฌ์–‘์„ ์ œ๋Œ€๋กœ ํŒŒ์•…ํ•˜์ง€ ๋ชปํ•˜๊ณ  "destination"ํ•„๋“œ๋ฅผ -> "dest"๋กœ ์ถ•์•ฝํ•ด์„œ ์‚ฌ์šฉํ–ˆ๋‹ค. 

 

์–ด๋–ป๊ฒŒ ๋ ๊นŒ?

๋ชจ๋“ˆ์— if๋ฌธ์„ ์ถ”๊ฐ€ํ•˜๊ณ , ์„œ์šธํƒ์‹œ๊ฐ€ ์„œ์šธ๋‚จ์–‘ํƒ์‹œ ์—…์ฒด๋ฅผ ์ธ์ˆ˜ํ–ˆ์„ ๊ฒฝ์šฐ๋Š” ๋”ฐ๋กœ ์ฒ˜๋ฆฌํ•ด์•ผํ•˜๋Š” ๋กœ์ง์ด ํ•„์š”ํ•˜๋‹ค.

์•„์ฃผ ๋งค๋„๋Ÿฝ์ง€ ์•Š๊ณ  ๋ณต์žกํ•œ ๋งค์ปค๋‹ˆ์ฆ˜์„ ์ถ”๊ฐ€ํ•ด์•ผํ•  ๊ฒƒ์ด๋‹ค.

๊ฒฐ๋ก 

LSP๋Š” ์•„ํ‚คํ…์ฒ˜ ์ˆ˜์ค€๊นŒ์ง€ ํ™•์žฅํ•  ์ˆ˜ ์žˆ๊ณ , ๋ฐ˜๋“œ์‹œ ํ™•์žฅํ•ด์•ผํ•œ๋‹ค.

์น˜ํ™˜ ๊ฐ€๋Šฅ์„ฑ์„ ์กฐ๊ธˆ์ด๋ผ๋„ ์œ„๋ฐฐํ•˜๋ฉด ์‹œ์Šคํ…œ ์•„ํ‚คํ…์ฒ˜๊ฐ€ ์˜ค์—ผ๋˜์–ด ์ƒ๋‹น๋Ÿ‰์˜ ๋ณ„๋„ ๋งค์ปค๋‹ˆ์ฆ˜์„ ์ถ”๊ฐ€ํ•ด์•ผ ํ•  ์ˆ˜๋„ ์žˆ๊ธฐ ๋•Œ๋ฌธ์—..

 

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

์ •์  ํƒ€์ž… ์–ธ์–ด๋กœ ์ž‘์„ฑ๋˜์—ˆ๋‹ค๊ณ  ํ•  ๋•Œ, OPS๋ผ๋Š” ์ธํ„ฐํŽ˜์ด์Šค์— op1, op2,op3๊ฐ€ ์žˆ๊ณ , User1๋Š” op1๋งŒ, User2๋Š” op2๋งŒ, User3๋Š” op3๋งŒ ์‚ฌ์šฉํ•œ๋‹ค๊ณ  ํ•˜์ž.
op2๊ฐ€ ๋ณ€๊ฒฝ๋˜์—ˆ์„ ๋•Œ, ๊ด€๋ จ์—†๋Š” User1ํด๋ž˜์Šค๋„ ๋‹ค์‹œ ์ปดํŒŒ์ผํ•˜๊ณ  ์ƒˆ๋กœ ๋ฐฐํฌํ•ด์•ผ ํ•œ๋‹ค.
-> ๊ทธ๋ ‡๊ธฐ ๋•Œ๋ฌธ์— ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ๋ถ„๋ฆฌํ•˜์ž.

ISP์™€ ์•„ํ‚คํ…์ฒ˜

์‹œ์Šคํ…œ S -> ํ”„๋ ˆ์ž„์›Œํฌ F -> DB D 
( -> : ์˜์กด์„ฑ ๋ฐฉํ–ฅ )
  • F์—์„œ๋Š” ๋ถˆํ•„์š”ํ•œ ๊ธฐ๋Šฅ, ์ฆ‰ S์™€๋Š” ๊ด€๊ณ„์—†๋Š” ๊ธฐ๋Šฅ์ด D์— ํฌํ•จ๋  ๋•Œ, ๊ทธ ๊ธฐ๋Šฅ ๋–„๋ฌธ์— D์˜ ๊ตฌ์กฐ๊ฐ€ ๋ณ€๊ฒฝ๋˜๋ฉด F,S ๋ชจ๋‘ ์žฌ๋ฐฐํฌ ํ•ด์•ผํ• ์ง€ ๋ชจ๋ฅธ๋‹ค.
  • ๋” ์‹ฌ๊ฐํ•œ ๋ฌธ์ œ๋Š” D ๋‚ด๋ถ€์˜ ๊ธฐ๋Šฅ ์ค‘ F์™€ S์—์„œ ๋ถˆํ•„์š”ํ•œ ๊ธฐ๋Šฅ์— ๋ฌธ์ œ๊ฐ€ ๋ฐœ์ƒํ•ด๋„ F์™€ S์— ์˜ํ–ฅ์„ ์ค€๋‹ค๋Š” ์‚ฌ์‹ค.

๊ฒฐ๋ก 

  • ๋ถˆํ•„์š”ํ•œ ์ง์„ ์‹ค์€ ๋ฌด์–ธ๊ฐ€์— ์˜์กดํ•˜๋ฉด ์˜ˆ์ƒ์น˜ ๋ชปํ•œ ๋ฌธ์ œ์— ๋น ์ง„๋‹ค.

 

โ— DIP : ์˜์กด์„ฑ ์—ญ์ „ ์›์น™

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

์•ˆ์ •๋œ ์ถ”์ƒํ™”

์ถ”์ƒ ์ธํ„ฐํŽ˜์ด์Šค์— ๋ณ€๊ฒฝ์ด ์ƒ๊ธฐ๋ฉด ์ด๋ฅผ ๊ตฌ์ฒดํ™”ํ•œ ๊ตฌํ˜„์ฒด๋“ค๋„ ๋”ฐ๋ผ์„œ ์ˆ˜์ •ํ•ด์•ผ ํ•œ๋‹ค.

์ฆ‰, ์ž์‹ ๋ณด๋‹ค ๋ณ€ํ•˜๊ธฐ ์‰ฌ์šด ๊ฒƒ์— ์˜์กดํ•˜์ง€ ๋งˆ๋ผ!

 

DIP ์ง€ํ‚ค๊ธฐ : ์•ˆ์ •๋œ ์†Œํ”„ํŠธ์›จ์–ด ์•„ํ‚คํ…์ฒ˜

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

 

 

LIST