๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ
  • ์žฅ์›์ต ๊ธฐ์ˆ ๋ธ”๋กœ๊ทธ
๐Ÿคท๐Ÿผ‍โ™€๏ธ Etc.../- ๊ธฐํƒ€

[๊ฐœ๋ฐœ์ž ์ฑ…์ฝ๊ธฐ] ํด๋ฆฐ ์ฝ”๋“œ-์• ์ž์ผ ์†Œํ”„ํŠธ์›จ์–ด ์žฅ์ธ ์ •์‹  (10์žฅ ํด๋ž˜์Šค)

by Wonit 2022. 3. 7.

ํ•ด๋‹น ๊ธ€์€ Robert C.Martin ํด๋ฆฐ ์ฝ”๋“œ ๋ผ๋Š” ์ฑ…์„ ์ฝ๊ณ  ํ•™์Šตํ•œ ๋‚ด์šฉ์„ ์ •๋ฆฌ ๋ฐ ํšŒ๊ณ ํ•˜๋Š” ๊ธ€ ์ž…๋‹ˆ๋‹ค. ์ž์„ธํ•œ ์‚ฌํ•ญ์€ YES 24 ํด๋ฆฐ ์ฝ”๋“œ - ์• ์ž์ผ ์†Œํ”„ํŠธ์›จ์–ด ์žฅ์ธ ์ •์‹  ์—์„œ ํ™•์ธํ•ด์ฃผ์„ธ์š”.

 

ํด๋ฆฐ ์ฝ”๋“œ - ์• ์ž์ผ ์†Œํ”„ํŠธ์›จ์–ด ์žฅ์ธ ์ •์‹  (Uncle Bob)

 

  • ์œ„ํ‚ค๋ถ์Šค
  • ์ง€์€์ด: Robert C.Martin (Uncle Bob)
  • ์˜ฎ๊ธด์ด: ๋ฐ•์žฌํ˜ธ, ์ดํ•ด์˜

 


 

์ด๋ฒˆ ์žฅ์—์„œ ์ด์•ผ๊ธฐํ•˜๊ณ ์ž ํ•˜๋Š” ๊ฒƒ

 

ํด๋ž˜์Šค ์ฒด๊ณ„

  • ์บก์Šํ™”
    • ๋ณ€์ˆ˜๋‚˜ ์œ ํ‹ธ๋ฆฌํ‹ฐ ํ•จ์ˆ˜๋ฅผ protected ๋กœ ์„ ์–ธํ•œ๋‹ค.
    • ์บก์Šํ™”๋ฅผ ํ’€์–ด์ฃผ๋Š” ๊ฒƒ์€ ์–ธ์ œ๋‚˜ ์ตœํ›„์˜ ์ˆ˜๋‹จ์ด๋‹ค

 

ํด๋ž˜์Šค๋Š” ์ž‘์•„์•ผ ํ•œ๋‹ค

  • ํด๋ž˜์Šค๋ฅผ ๋งŒ๋“ค ๋•Œ ์ฒซ ๋ฒˆ์งธ ๊ทœ์น™์€ ํฌ๊ธฐ์ด๋‹ค.
    • ํด๋ž˜์Šค๋Š” ์ž‘์•„์•ผ ํ•œ๋‹ค.

 

ํด๋ž˜์Šค์˜ ์ด๋ฆ„์€ ํ•ด๋‹น ํด๋ž˜์Šค์˜ ์ฑ…์ž„์„ ๊ธฐ์ˆ ํ•ด์•ผ ํ•œ๋‹ค.

  • ํด๋ž˜์Šค ์ด๋ฆ„์˜ ์ž‘๋ช…์ด์•ผ๋ง๋กœ ํด๋ž˜์Šค๋ฅผ ์ค„์ด๋Š” ์ฒซ๋ฒˆ์งธ ์ฒ™๋„์ด๋‹ค
  • ํด๋ž˜์Šค์˜ ์ด๋ฆ„์ด ๋‹น์žฅ ๋– ์˜ค๋ฅด์ง€ ์•Š๋Š”๋‹ค๋ฉด ํด๋ž˜์Šค๊ฐ€ ์—ฌ๋Ÿฌ ์ฑ…์ž„์„ ๊ฐ–๊ณ  ์žˆ๋‹ค๋Š” ๋œป์ด๋‹ค.
  • ํด๋ž˜์Šค ์ด๋ฆ„์— Manager, Processor ๋“ฑ์˜ ๋ชจํ˜ธํ•œ ํ‚ค์›Œ๋“œ๊ฐ€ ์žˆ๋‹ค๋ฉด ์—ฌ๋Ÿฌ ์ฑ…์ž„์„ ๊ฐ–๊ณ  ์žˆ๋‹ค๋Š” ๋œป์ด๋‹ค.
  • ํด๋ž˜์Šค์˜ ์ด๋ฆ„์€ if, and, or, but ์„ ์‚ฌ์šฉํ•˜์ง€ ์•Š๊ณ  25๋‹จ์–ด ๋‚ด์™ธ๋กœ ์„ค๋ช…์ด ๊ฐ€๋Šฅํ•ด์•ผ ํ•œ๋‹ค

 

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

  • ํด๋ž˜์Šค๋ฅผ ๋ณ€๊ฒฝํ•  ์ด์œ ๋Š” ๋‹จ ํ•˜๋‚˜ ๋ฟ์ด์–ด์•ผ ํ•œ๋‹ค.
  • ๊ฐ€์žฅ ์‰ฌ์šด ์›์น™์ด์ง€๋งŒ ๊ฐ€์žฅ ์ง€์ผœ์ง€์ง€ ์•Š๋Š” ์›์น™์ด๋‹ค
  • ํฐ ํด๋ž˜์Šค ๋ช‡๊ฐœ๊ฐ€ ์•„๋‹Œ ์ž‘์€ ํด๋ž˜์Šค ์—ฌ๋Ÿฟ์œผ๋กœ ๋‚˜๋‰˜์–ด์ง„ ์‹œ์Šคํ…œ์ด ๋ฐ”๋žŒ์งํ•˜๋‹ค
  • ์ž‘์€ ํด๋ž˜์Šค๋Š” ๋‹ค๋ฅธ ์ž‘์€ ํด๋ž˜์Šค์™€ ํ˜‘๋ ฅ์„ ํ†ตํ•ด ํ•„์š”ํ•œ ๋™์ž‘์„ ์ˆ˜ํ–‰ํ•ด ๋‚˜๊ฐ€์•ผ ํ•œ๋‹ค.

 

์‘์ง‘๋„

  • ํด๋ž˜์Šค๋Š” ์ธ์Šคํ„ด์Šค ๋ณ€์ˆ˜ ์ˆ˜๊ฐ€ ์ž‘์•„์•ผ ํ•œ๋‹ค.
  • ๋ฉ”์„œ๋“œ๊ฐ€ ๋ณ€์ˆ˜๋ฅผ ๋” ๋งŽ์ด ์‚ฌ์šฉํ•  ์ˆ˜๋ก ์‘์ง‘๋„๊ฐ€ ๋†’๋‹ค
  • ๋ฌด์กฐ๊ฑด์ ์œผ๋กœ ์‘์ง‘๋„๊ฐ€ ๋†’๋‹ค๊ณ  ํ•ด์„œ ์ข‹์€ ํด๋ž˜์Šค๋Š” ์•„๋‹ˆ๋‹ค
    • ํด๋ž˜์Šค๊ฐ€ ์ธ์Šคํ„ด์Šค ๋ณ€์ˆ˜๋ฅผ ๋งŽ์ด ๊ฐ–๊ณ  ์žˆ๋‹ค๋ฉด ๋ถ„๋ฆฌํ•ด์•ผํ•  ์‹ ํ˜ธ์ด๋‹ค

 

๋ณ€๊ฒฝํ•˜๊ธฐ ์‰ฌ์šด ํด๋ž˜์Šค

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

 

๋‚˜์˜ ํ•ด์„๊ณผ ํšŒ๊ณ 

 

์ง€๊ธˆ๊นŒ์ง€ ํด๋ž˜์Šค ์ด๋ฆ„์— ๋Œ€ํ•ด์„œ ๊ณ ๋ฏผํ•ด๋ณธ ์ ์ด ์žˆ์„๊นŒ?

 

๋‚ด ์›น ๋ฐฑ์—”๋“œ๋Š” Spring Layered Architecture ๋กœ๋ถ€ํ„ฐ ์‹œ์ž‘๋˜์—ˆ๋‹ค.

 

๋„๋ฆฌ ์•Œ๋ ค์ ธ์žˆ๋‹ค ์‹ถ์ด Layered Architecture ์˜ ํŠน์„ฑ์— ๋”ฐ๋ผ์„œ ์–ด์ฉŒ๋ฉด ์ •ํ•ด์ ธ์žˆ๋Š” ํด๋ž˜์Šค๋ช…์„ Entity ์ด๋ฆ„๊ณผ ํ•จ๊ป˜ ์‚ฌ์šฉํ•˜๊ธฐ๋งŒ ํ–ˆ์—ˆ๋‹ค.

 

xxxService, xxxController, xxxRepository ์ฒ˜๋Ÿผ ๋ง์ด๋‹ค.

 

์ด๋Š” ๊ฒฐ๊ตญ ์–ด๋–ค Entity ๊ฐ€ ๋งŒ๋“ค์–ด์ง€๋ฉด ๋„ˆ๋ฌด๋‚˜๋„ ์ž์—ฐ์Šค๋Ÿฝ๊ฒŒ Entity ์— ๋”ฐ๋ฅธ Service, Controller, Repository ๊ฐ€ ์ƒ๊ฒจ๋‚ฌ์œผ๋ฉฐ ๊ทธ ํด๋ž˜์Šค๋“ค์˜ ์ฑ…์ž„๊ณผ ์—ญํ• ์— ๋Œ€ํ•ด์„œ๋Š” ๊ณ ๋ฏผํ•  ์—ฌ์ง€์กฐ์ฐจ ์กด์žฌํ•˜์ง€ ์•Š์•˜๋‹ค.

 

ํ•˜์ง€๋งŒ ์ตœ๊ทผ ๋‚ด๊ฐ€ ์†ํ•œ ํŠธ๋ ˆ๋ฐ”๋ฆฌ์—์„œ ํ”„๋กœ์ ํŠธ๋ฅผ ์ง„ํ–‰ํ•˜๋ฉฐ ๋Š๋‚€ ๋ฐ”๊ฐ€ ์žˆ๋‹ค.

 

Spring ์€ ๊ทธ๋ƒฅ Spring ์ด๊ณ  ๋งŒ๋Šฅ์ด ์•„๋‹ˆ๋‹ค. ์ฆ‰, Spring ์€ ๋„๊ตฌ์ด๋ฉฐ ๊ทธ์— ์˜ํ–ฅ์„ ๋ฐ›์ง€ ์•Š์•„์•ผ ํ•œ๋‹ค๋Š” ๊ฒƒ์ด๋‹ค.

 

ํ•ด๋‹น ํ”„๋กœ์ ํŠธ์—์„œ๋Š” ์›น ๋ฐฑ์—”๋“œ๋ฅผ ์„ค๊ณ„ํ•˜๊ณ  ๊ตฌ์ถ•ํ•˜๋Š” ํ”„๋กœ์ ํŠธ์˜€์ง€๋งŒ Spring ์— ๋งŽ์€ ์˜ํ–ฅ์„ ๋ฐ›์ง€ ์•Š๊ณ  ๊ฐœ๋ฐœ์„ ํ–ˆ์—ˆ๋‹ค.

 

๊ทธ์— ๋”ฐ๋ผ์„œ ์ž์—ฐ์Šค๋Ÿฝ๊ฒŒ Layered Architecture ์ด๋ผ๋Š” ์ƒ๊ฐ์ด ๋ฉ€์–ด์กŒ๊ณ  ๊ฐ๊ฐ ํด๋ž˜์Šค์˜ ์ด๋ฆ„์ด ๊ฐ–๊ณ ์žˆ๋Š” ์ฑ…์ž„๊ณผ ์˜๋ฏธ์— ๋Œ€ํ•ด์„œ ๊ฐœ๋ฐœ์ธ์ƒ ์ฒ˜์Œ์œผ๋กœ ๊ณ ๋ฏผ์„ ํ•ด๋ดค์—ˆ๋‹ค.

 

๋งŒ์•ฝ ๊ทธ ๊ณผ์ •๋“ค์„ ๊ฒช์ง€ ์•Š๊ณ  ์ด๋ฒˆ ์ฑ•ํ„ฐ๋ฅผ ์ฝ์—ˆ๋”๋ผ๋ฉด ์•„๋งˆ ๋‚˜๋Š”

 

xxxService, xxxController, xxxRepository ๋ฅผ ์–ด๋–ป๊ฒŒ ๋” ์ฑ…์ž„๊ฐ์žˆ๊ฒŒ ์ด๋ฆ„์„ ์ง“์ง€?! ๋„ˆ๋ฌด ์ถ”์ƒ์ ์ธ ์ฑ•ํ„ฐ์•ผ

 

ํ•˜๊ณ  ๋„˜์–ด๊ฐ”์„ ๊ฒƒ์ด๋‹ค.

๋Œ“๊ธ€