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

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

by Wonit 2022. 3. 8.

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

 

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

 

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

 

 


 

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

 

๋†’์€ ์ถ”์ƒํ™”์˜ ์ˆ˜์ค€, ์‹œ์Šคํ…œ ์ˆ˜์ค€์—์„œ๋„ ๊นจ๋—ํ•จ์„ ์œ ์ง€ํ•˜๋Š” ๋ฐฉ๋ฒ•

 

์‹œ์Šคํ…œ์˜ ์ œ์ž‘๊ณผ ์‹œ์Šคํ…œ ์‚ฌ์šฉ์„ ๋ถ„๋ฆฌํ•˜๋ผ (construction vs use)

 

  • ์‹œ์ž‘ ๋‹จ๊ณ„๋Š” ๋ชจ๋“  ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์ด ํ’€์–ด์•ผ ํ•  ๊ด€์‹ฌ์‚ฌ
  • ์ „ํ˜•์ ์ธ ์˜ˆ์‹œ๋กœ๋Š” Lazy Initializing
    • ๊ฐ์ฒด์˜ ์ƒ์„ฑ๊ณผ ๋Ÿฐํƒ€์ž„ ๋กœ์ง์ด ์„ž์—ฌ์žˆ๋‹ค
    • ์ฑ…์ž„์ด ์—ฌ๋Ÿฌ๊ฐœ๋‹ค
    • ๊ด€์‹ฌ์‚ฌ์˜ ๋ถ„๋ฆฌ๊ฐ€ ๋˜์ง€ ์•Š์•˜๋‹ค
  • ์˜์กด์„ฑ ์ฃผ์ž…์€ ์ œ์ž‘๊ณผ ์‚ฌ์šฉ์„ ๋ถ„๋ฆฌํ•˜๋Š” ๊ฐ€์žฅ ๊ฐ•๋ ฅํ•œ ๋ฉ”์ปค๋‹ˆ์ฆ˜
    • ๊ฐ€์žฅ ๊ฐ•๋ ฅํ•œ ๋ฉ”์ปค๋‹ˆ์ฆ˜

 

ํ™•์žฅ

 

  • ์ฒ˜์Œ๋ถ€ํ„ฐ '์˜ฌ๋ฐ”๋ฅด๊ฒŒ' ์‹œ์Šคํ…œ์„ ๋งŒ๋“ค ์ˆ˜ ์žˆ๋‹ค๋Š” ๋ฏฟ์Œ์€ ๋ฏธ์‹ ์ด๋‹ค.
    • ์šฐ๋ฆฌ๋Š” ์˜ค๋Š˜ ์ฃผ์–ด์ง„ ์‚ฌ์šฉ์ž ์Šคํ† ๋ฆฌ์— ๋งž๊ฒŒ ์‹œ์Šคํ…œ์„ ๊ตฌํ˜„ํ•ด์•ผ ํ•œ๋‹ค
    • ๋‚ด์ผ์€ ์ƒˆ๋กœ์šด ์Šคํ† ๋ฆฌ์— ๋งž๊ฒŒ ์‹œ์Šคํ…œ์„ ์กฐ์ •ํ•˜๊ณ  ํ™•์žฅํ•˜๋ฉด ๋œ๋‹ค.
  • TDD, Refactoring ์œผ๋กœ ์–ป์–ด์ง€๋Š” ๊นจ๋—ํ•œ ์ฝ”๋“œ๋Š” ์ฝ”๋“œ ์ˆ˜์ค€์—์„œ ์‹œ์Šคํ…œ์„ ์กฐ์žฅํ•˜๊ณ  ํ™•์žฅํ•˜๊ธฐ ์‰ฝ๊ฒŒ ๋งŒ๋“ค์–ด์ง„๋‹ค.
  • ์‹œ์Šคํ…œ ์ˆ˜์ค€์—์„œ๋Š” ์—ญ์‹œ๋‚˜ ์ ์ ˆํ•œ ๊ด€์‹ฌ์‚ฌ์˜ ๋ถ„๋ฆฌ์ด๋‹ค.

 

ํšก๋‹จ ๊ด€์‹ฌ์‚ฌ

  • ํšก๋‹จ ๊ด€์‹ฌ์‚ฌ๋Š” ํ†ตํ•ด์„œ ๋ชจ๋“ˆ์„ฑ์„ ํ™•๋ณดํ•˜๋Š” ์ผ๋ฐ˜์ ์ธ ๋ฐฉ๋ฒ•๋ก ์ด๋‹ค.
  • ํŠน์ • ๊ด€์‹ฌ์‚ฌ๋ฅผ ์ง€์›ํ•˜๋ ค๋ฉด ์‹œ์Šคํ…œ์—์„œ ํŠน์ • ์ง€์ ๋“ค์ด ๋™์ž‘ํ•˜๋Š” ๋ฐฉ์‹์„ ์ผ๊ด€์„ฑ ์žˆ๊ฒŒ ๋ฐ”๊พธ์–ด์•ผ ํ•œ๋‹ค.
  • ๋Œ€ํ‘œ์ ์ธ ํšก๋‹จ ๊ด€์‹ฌ์‚ฌ
    1. Java Proxy
    2. ์ˆœ์ˆ˜ ์ž๋ฐ” AOP ํ”„๋ ˆ์ž„์›Œํฌ
    3. AspectJ ๊ด€์ 

 

ํ…Œ์ŠคํŠธ ์ฃผ๋„ ์‹œ์Šคํ…œ ์•„ํ‚คํ…์ฒ˜ ๊ตฌ์ถ•

 

  • ์•„์ฃผ ๋‹จ์ˆœํ•˜๋ฉด์„œ๋„ ๋ฉ‹์ง€๊ฒŒ ๋ถ„๋ฆฌ๋œ ์•„ํ‚คํ…์ฒ˜๋กœ ๊ฒฐ๊ณผ๋ฌผ์„ ์ถœ์‹œํ•œ๋‹ค.
  • ์ดํ›„ ๊ธฐ๋ฐ˜ ๊ตฌ์กฐ๋“ค์„ ์ถ”๊ฐ€ํ•˜๋ฉฐ ์กฐ๊ธˆ์”ฉ ํ™•์žฅํ•ด ๋‚˜๊ฐ€์ž

 

์˜์‚ฌ ๊ฒฐ์ •์„ ์ตœ์ ํ™” ํ•˜๋ผ

 

  • ๋ชจ๋“ˆ๊ณผ ๊ด€์‹ฌ์‚ฌ์˜ ๋ถ„๋ฆฌ๊ฐ€ ๋œ๋‹ค๋ฉด ์ง€์—ฝ์  ๊ด€๋ฆฌ์™€ ๊ฒฐ์ •์ด ๊ฐ€๋Šฅํ•ด์ง
  • ๊ฐ€๋Šฅํ•œ ๋งˆ์ง€๋ง‰ ์ˆœ๊ฐ„๊นŒ์ง€ ๊ฒฐ์ •์„ ๋ฏธ๋ฃจ๋Š” ๋ฐฉ๋ฒ•์ด ์ตœ์„ ์ด๋‹ค
  • ๋ช…๋ฐฑํ•œ ๊ฐ€์น˜๊ฐ€ ์žˆ์„ ๋•Œ ํ‘œ์ค€์„ ํ˜„๋ช…ํ•˜๊ฒŒ ์‚ฌ์šฉํ•˜๋ผ
    • ํ‘œ์ค€์ด ๊ฐ€์ ธ๋‹ค์ฃผ๋Š” ๋ถˆํ•„์š”ํ•จ๊ณผ ๋น„ํšจ์œจ์ด ์กด์žฌํ•  ์ˆ˜ ์žˆ๋‹ค.
    • ํ™•์‹คํ•œ ์ด๋“์„ ๊ฐ€์ ธ์˜ฌ ๊ฒฝ์šฐ์—๋งŒ ์‚ฌ์šฉํ•˜๋ผ

 

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

 

์˜์‚ฌ ๊ฒฐ์ •์„ ์ตœ์ ํ™” ํ•˜๋ผ, ๋‚ด๊ฐ€ ์ตœ๊ทผ๋“ค์–ด ๊ฐ€์žฅ ๋งŽ์ด ๋Š๋ผ๊ณ  ์žˆ๋Š” ๊ฒƒ๋“ค์ด๋‹ค.

 

์„ฑ๊ธ‰ํ•œ ์˜์‚ฌ ๊ฒฐ์ •์„ ํ•  ๋•Œ๋ฉด ์ฆ‰, ๋ฌด์–ธ๊ฐ€ ๊ฒฐ์ •์ด ๋œ ์ƒํƒœ๋กœ ํ”„๋กœ์ ํŠธ๊ฐ€ ์ง„ํ–‰๋˜๋‹ค ๋ณด๋ฉด ์‹œ์•ผ๊ฐ€ ์ข์•„์ง€๋Š” ๊ฒฝํ—˜์„ ์ž์ฃผ ํ–ˆ์—ˆ๊ณ  ๊ทธ ํ•ด๊ฒฐ ๋ฐฉ๋ฒ•์œผ๋กœ ์˜์‚ฌ๊ฒฐ์ •์„ ์ตœํ›„๋กœ ๋ฏธ๋ฃจ๋„๋ก ํ–ˆ์—ˆ๋‹ค.

 

๋น„๋‹จ ํ”„๋กœ์ ํŠธ ๊ด€๋ฆฌ ๋ฟ๋งŒ ์•„๋‹ˆ๋ผ ์‹œ์Šคํ…œ ์„ค๊ณ„์—์„œ๋„ ์œ„์˜ ๋ฐฉ๋ฒ•์ด ๋งค์šฐ ํšจ๊ณผ์ ์ด์—ˆ๋‹ค.

 

์˜์‚ฌ๊ฒฐ์ •์„ ๋ฏธ๋ฃจ๋‹ค ๋ณด๋ฉด ์–ด๋– ํ•œ ์š”๊ตฌ์‚ฌํ•ญ์ด ๋“ค์–ด์˜ฌ์ง€ ๋ชจ๋ฅด๊ธฐ ๋•Œ๋ฌธ์— ์ตœ๋Œ€ํ•œ ๋งŽ์€ ์š”๊ตฌ์‚ฌํ•ญ์„ ์ˆ˜์šฉํ•  ์ˆ˜ ์žˆ๋„๋ก ์ƒ๊ฐํ•  ์ˆ˜ ์žˆ๊ฒŒ ๋˜๋”๋ผ.

 

์ด๋Ÿฌํ•œ ๋ฐฉ๋ฒ•์„ ์‹œ์Šคํ…œ ์„ค๊ณ„์—์„œ๋„ ์ ์šฉ์‹œํ‚จ๋‹ค๋ฉด Uncle Bob ๋ง ๋Œ€๋กœ ๊นจ๋—ํ•œ ์‹œ์Šคํ…œ์˜ ์•„ํ‚คํ…์ณ๊ฐ€ ํƒ„์ƒํ•  ์ˆ˜ ์žˆ์„๊ฒƒ ๊ฐ™๋‹ค.

 

๋˜ํ•œ ํ•œ๊ฐ€์ง€ ๋” ๋Š๋‚€๋ฐ”๊ฐ€ ์žˆ๋‹ค๋ฉด ๋ช…๋ฐฑํ•œ ๊ฐ€์น˜๊ฐ€ ์žˆ์„ ๋•Œ ํ‘œ์ค€์„ ํ˜„๋ช…ํ•˜๊ฒŒ ์‚ฌ์šฉํ•˜๋ผ ์—์„œ ๋ช‡๊ฐ€์ง€ ๊ณผ๊ฑฐ์˜ ๊ธฐ์–ต๋“ค์ด ์Šค์ณ์ง€๋‚˜๊ฐ”๋‹ค.

 

๋‚˜๋Š” ์™œ xxxServiceImpl ์ด๋ผ๋Š” ํด๋ž˜์Šค๋ฅผ ์“ธ๊นŒ? ์™œ xxxDAO ๋ผ๋Š” ํด๋ž˜์Šค๋ฅผ ์ผ์„๊นŒ?

 

์š”์ฆ˜์€ ์ž˜ ํ•˜์ง€๋Š” ์•Š์ง€๋งŒ ์‚ฌ์šฉํ•˜๋Š” ๋‹น์‹œ์—๋„ ์™œ ์“ฐ๊ณ  ์™œ ์ €๋Ÿฐ ์ด๋ฆ„์„ ๋ถ€์—ฌํ–ˆ๋Š”์ง€ ๋ชจ๋ฅธ๋‹ค.

 

๊ด€๋ก€์— ๋”ฐ๋ผ์„œ ์‚ฌ์šฉํ–ˆ๋‹ค๊ณ ๋Š” ํ•˜๋‚˜ ์™œ ๊ด€๋ก€๊ฐ€ ๋‚˜์™”๋Š”์ง€ ์ž˜ ๋ชจ๋ฅธ๋‹ค.

 

์ด์™€ ๋น„์Šทํ•œ ๋งฅ๋ฝ์œผ๋กœ ๋‚ด๊ฐ€ ์•„์ง ์•Œ์ง€๋Š” ๋ชปํ•˜๋‚˜ ๋ช…๋ฐฑํ•œ ๊ฐ€์น˜๊ฐ€ ์—†์Œ์—๋„ ๋ถˆ๊ตฌํ•˜๊ณ  ์‚ฌ์šฉํ•˜๋Š” ๋ช‡๊ฐ€์ง€์˜ ํ‘œ์ค€๋“ค์ด ์žˆ์„๊ฒƒ์ด๋‹ค.

 

๊ฒฝ๊ณ„ํ•˜์ž

๋Œ“๊ธ€