๐Ÿ“œ CleanCode

[CleanCode]์‹œ์Šคํ…œ 1

๋‰ด์ด NUEY 2024. 10. 10. 17:24
๋ฐ˜์‘ํ˜•

 

๊ฒŒ์‹œ๊ธ€์— ๋“ค์–ด๊ฐ€๊ธฐ ์ „ ๋ฏธ๋ฆฌ ๋งํ•˜์ž๋ฉด
์‹œ์Šคํ…œ ํŒŒํŠธ์˜ ๊ฒฐ๋ก ์€ ๋„๊ตฌ๋ฅผ ์‚ฌ์šฉํ•˜์ž๋กœ ๋์ด ๋‚ฉ๋‹ˆ๋‹ค.
spring framework์™€ DSL๋ฅผ ์‚ฌ์šฉ์„ ๊ถŒ์žฅํ•˜๋Š” ๊ฑธ๋กœ์š”.
๊ทธ๋Ÿผ์—๋„ ์™œ ๊ฑฐ์˜ ๋ชจ๋‘๊ฐ€ ํ”„๋ ˆ์ž„์›Œํฌ๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ์ง€์— ๋Œ€ํ•ด, ๋ฐœ์ „ ๊ณผ์ •์„ ๋ณผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

 


 

์†Œํ”„ํŠธ์›จ์–ด ์ œ์ž‘์€ ๋„์‹œ๊ฑด์„ค๊ณผ ๊ฐ™๋‹ค

 

 

  • ์ œ์ž‘construction์€ ์‚ฌ์šฉuse๊ณผ ์•„์ฃผ ๋‹ค๋ฅด๋‹ค.

  • ์†Œํ”„ํŠธ์›จ์–ด ์‹œ์Šคํ…œ์€ (์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ๊ฐ์ฒด๋ฅผ ์ œ์ž‘ํ•˜๊ณ  ์˜์กด์„ฑ์„ ์„œ๋กœ '์—ฐ๊ฒฐ'ํ•˜๋Š”) ์ค€๋น„๊ณผ์ •๊ณผ
    (์ค€๋น„ ๊ณผ์ • ์ดํ›„์— ์ด์–ด์ง€๋Š”) ๋Ÿฐํƒ€์ž„ ๋กœ์ง์„ ๋ถ„๋ฆฌํ•ด์•ผ ํ•œ๋‹ค.

  • ๊ด€์‹ฌ์‚ฌ ๋ถ„๋ฆฌ๋Š” ์šฐ๋ฆฌ ๋ถ„์•ผ์—์„œ ๊ฐ€์žฅ ์˜ค๋ž˜๋˜๊ณ  ๊ฐ€์žฅ ์ค‘์š”ํ•œ ์„ค๊ณ„ ๊ธฐ๋ฒ• ์ค‘ ํ•˜๋‚˜๋‹ค.

๊ด€์‹ฌ์‚ฌ Concern
์†Œํ”„ํŠธ์›จ์–ด์—์„œ ํ•ด๊ฒฐํ•ด์•ผ ํ•  ํŠน์ •ํ•œ ๋ฌธ์ œ๋‚˜ ์ฑ…์ž„์„ ์˜๋ฏธํ•ฉ๋‹ˆ๋‹ค.
์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์˜ ๊ฐ ๋ถ€๋ถ„์ด ๋‹ด๋‹นํ•˜๋Š” ์—ญํ•  ๋˜๋Š” ๊ธฐ๋Šฅ์„ ๊ฐ€๋ฆฌํ‚ค๋Š” ๊ฐœ๋…์œผ๋กœ,
์›นํŽ˜์ด์ง€๋ฅผ ์˜ˆ๋กœ ๋“ค๋ฉด ๋กœ๊ทธ์ธ/๊ฒŒ์‹œํŒ ๋“ฑ๊ณผ ๊ฐ™์€ ๊ธฐ๋Šฅ ํ˜น์€ ์‹œ์ž‘ ๋‹จ๊ณ„๋Š” ์„ค๊ณ„์—์„œ ์ฑ…์ž„์„ ๊ฐ€์ง€๊ณ  ์žˆ๋‹ค๊ณ  ๋ณผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

 


 

์ดˆ๊ธฐํ™” ์ง€์—ฐ (๊ณ„์‚ฐ ์ง€์—ฐ)
Lazy Initialization (Lazy Evaluation)

 

์ด๋Ÿฌํ•œ ํ˜•ํƒœ๋ฅผ ์ดˆ๊ธฐํ™”/๊ณ„์‚ฐ ์ง€์—ฐ์ด๋ผ๊ณ  ํ•œ๋‹ค.

 

  •  ์žฅ์ 
    • ์‹ค์ œ๋กœ ํ•„์š”ํ•  ๋•Œ๊นŒ์ง€ ๊ฐ์ฒด๋ฅผ ์ƒ์„ฑํ•˜์ง€ ์•Š์œผ๋ฏ€๋กœ ๋ถˆํ•„์š”ํ•œ ๋ถ€ํ•˜๊ฐ€ ๊ฑธ๋ฆฌ์ง€ ์•Š๋Š”๋‹ค.
      → ๋”ฐ๋ผ์„œ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ์‹œ์ž‘ํ•˜๋Š” ์‹œ๊ฐ„์ด ๊ทธ๋งŒํผ ๋นจ๋ผ์ง„๋‹ค.

    • ์–ด๋–ค ๊ฒฝ์šฐ์—๋„ nullํฌ์ธํ„ฐ๋ฅผ ๋ฐ˜ํ™˜ํ•˜์ง€ ์•Š๋Š”๋‹ค.

  • ๋‹จ์ 
    • ๋งŒ์•ฝ MyServiceImpl ๊ฐ์ฒด๋ฅผ ์ „ํ˜€ ์‚ฌ์šฉํ•˜์ง€ ์•Š๋”๋ผ๋„,
      MyServiceImpl์—์„œ ๋ฌธ์ œ๊ฐ€ ์ƒ๊ธฐ๋ฉด ์ปดํŒŒ์ผ ์ž์ฒด๊ฐ€ ์•ˆ๋œ๋‹ค.
      → ์˜์กด์„ฑ ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•ด์•ผํ•˜๋Š” ๋‹จ์ ์ด ์žˆ๋‹ค.

    • MyServiceImpl์ด ๋ฌด๊ฑฐ์šด ๊ฐ์ฒด๋ผ๋ฉด ํ…Œ์ŠคํŠธ ๊ฒฝ๋กœ์™€ ์ฑ…์ž„์ด ๋„ˆ๋ฌด ๋งŽ์•„์ง„๋‹ค.

    • ๋ฌด์—‡๋ณด๋‹ค MyServiceImpl์˜ ๋ชจ๋“  ๋ฉ”์„œ๋“œ๋ฅผ ์‚ฌ์šฉํ•ด์•ผ๋งŒ ํ•˜๋Š” ๊ฑด ์ง€ ์•Œ ์ˆ˜ ์—†๋‹ค.

  •  ํ•œ๋ฒˆ ์ •๋„๋งŒ ์ด ๋ฐฉ๋ฒ•์„ ์‚ฌ์šฉํ•œ๋‹ค๋ฉด ๋ฌธ์ œ๋˜์ง€ ์•Š์ง€๋งŒ, ์ˆ˜์‹œ๋กœ ์‚ฌ์šฉํ•œ๋‹ค๋ฉด ๋ฌธ์ œ์ด๋‹ค.


 

Main ๋ถ„๋ฆฌ

 

main()์—์„œ ์ƒ์„ฑ ๋ถ„๋ฆฌ

 

  • ์‹œ์Šคํ…œ์—์„œ ์ƒ์„ฑ๊ณผ ์‚ฌ์šฉ์„ ๋ถ„๋ฆฌํ•˜๋Š” ํ•œ ๊ฐ€์ง€ ๋ฐฉ๋ฒ•์ด๋‹ค.

  • ์ƒ์„ฑ๊ณผ ๊ด€๋ จํ•œ ์ฝ”๋“œ๋Š” ๋ชจ๋‘ main์ด๋‚˜ main์ด ํ˜ธ์ถœํ•˜๋Š” ๋ชจ๋“ˆ๋กœ ์˜ฎ๊ธด๋‹ค.

  • main ํ•จ์ˆ˜์—์„œ ์‹œํŠธํ…œ ํ•„์š”ํ•œ ๊ฐ์ฒด๋ฅผ ์ƒ์„ฑํ•œ ํ›„ ์ด๋ฅผ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์— ๋„˜๊ธด๋‹ค.
    ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์€ ๊ทธ์ € ๊ฐ์ฒด๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ๋œ๋‹ค.

  • ๋ชจ๋“  ํ™”์‚ดํ‘œ๊ฐ€ main์ชฝ์—์„œ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์ชฝ์„ ํ–ฅํ•œ๋‹ค.
    → ์ฆ‰, ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์€ main์ด๋‚˜ ๊ฐ์ฒด๊ฐ€ ์ƒ์„ฑ๋˜๋Š” ๊ณผ์ •์„ ์ „ํ˜€ ๋ชจ๋ฅธ๋‹ค.


 

Factory

 

ํŒฉํ† ๋ฆฌ๋กœ ์ƒ์„ฑ ๋ถ„๋ฆฌ

 

  • ๊ฐ์ฒด๊ฐ€ ์ƒ์„ฑ๋˜๋Š” ์‹œ์ ์„ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์ด ๊ฒฐ์ •ํ•  ํ•„์š”๊ฐ€ ์ƒ๊ธด๋‹ค.
    ex) ์ฃผ๋ฌธ์ ‘์ˆ˜ → ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์€ LineItem ์ธ์Šคํ„ด์Šค์ƒ์„ฑ    order.

  • ์ด ๋•Œ๋Š” Abstract Facotry ํŒจํ„ด์„ ์‚ฌ์šฉํ•œ๋‹ค.
    → LineItem์„ ์ƒ์„ฑํ•˜๋Š” ์‹œ์ ์€ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์ด ๊ฒฐ์ •ํ•˜์ง€๋งŒ, LineItem์„ ์ƒ์„ฑํ•˜๋Š” ์ฝ”๋“œ๋Š” ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์ด ๋ชจ๋ฅธ๋‹ค.


 

์˜์กด์„ฑ ์ฃผ์ž…
Dependency Injection

 

์˜์กด์„ฑ ์ฃผ์ž…์„ ๋ถ€๋ถ„์ ์œผ๋กœ ๊ตฌํ˜„ํ•œ ์ฝ”๋“œ

 

  • ์‚ฌ์šฉ๊ณผ ์ œ์ž‘์„ ๋ถ„๋ฆฌํ•˜๋Š” ๊ฐ•๋ ฅํ•œ ๋งค์ปค๋‹ˆ์ฆ˜์ด๋‹ค.
  • ์ œ์–ด ์—ญ์ „ ๊ธฐ๋ฒ•์„ ์˜์กด์„ฑ ๊ด€๋ฆฌ์— ์ ์šฉํ•œ๋‹ค.

์ œ์–ด ์—ญ์ „ Invension of Control
ํ•œ ๊ฐ์ฒด๊ฐ€ ๋งก์€ ๋ณด์กฐ ์ฑ…์ž„์„ ์ƒˆ๋กœ์šด ๊ฐ์ฒด์—๊ฒŒ ์ „์ ์œผ๋กœ ๋– ๋„˜๊ธด๋‹ค.
๊ฐœ๋กœ์šด ๊ฐ์ฒด๋Š” ๋„˜๊ฒจ๋ฐ›์€ ์ฑ…์ž„๋งŒ ๋งก์œผ๋ฏ€๋กœ ๋‹จ์ผ ์ฑ…์ž„ ์›์น™SRP๋ฅผ ์ง€ํ‚ค๊ฒŒ ๋œ๋‹ค.

 

  • ์˜์กด์„ฑ ๊ด€๋ฆฌ ๋งฅ๋ฝ์—์„œ ๊ฐ์ฒด๋Š” ์˜์กด์„ฑ ์ž์ฒด๋ฅผ ์ธ์Šคํ„ด์Šค๋กœ ๋งŒ๋“œ๋Š” ์ฑ…์ž„์€ ์ง€์ง€ ์•Š๋Š”๋‹ค.
    → ์ด๋Ÿฐ ์ฑ…์ž„์„ ๋‹ค๋ฅธ '์ „๋‹ด'๋งค์ปค๋‹ˆ์ฆ˜์— ๋„˜๊ฒจ์•ผ๋งŒ ํ•œ๋‹ค. ๊ทธ๋ ‡๊ฒŒ ์ œ์–ด๋ฅผ ์—ญ์ „ํ•œ๋‹ค.

  • ์ดˆ๊ธฐ ์„ค์ •์€ ์‹œ์Šคํ…œ ์ „์ฒด์— ํ•„์š”ํ•˜๋ฏ€๋กœ ๋Œ€๊ฐœ '์ฑ…์ž„์งˆ' ๋ฉ”์ปค๋‹ˆ์ฆ˜์œผ๋กœ 'main'๋ฃจํ‹ด์ด๋‚˜ ํŠน์ˆ˜ ์ปจํ…Œ์ด๋„ˆ๋ฅผ ์‚ฌ์šฉํ•œ๋‹ค.

  • ์˜์กด์„ฑ์„ ์ฃผ์ž…ํ•˜๋Š” ๋ฐฉ๋ฒ•์œผ๋กœ ์„ค์ •์žsetter ๋ฉ”์„œ๋“œ๋‚˜ ์ƒ์„ฑ์ž ์ธ์ˆ˜๋ฅผ (ํ˜น์€ ๋‘˜ ๋‹ค)์ œ๊ณตํ•œ๋‹ค.

์Šคํ”„๋ง ํ”„๋ ˆ์ž„์›Œํฌ๋Š” ์ž๋ฐ” DI ์ปจํ…Œ์ด๋„ˆ๋ฅผ ์ œ๊ณตํ•œ๋‹ค.
 → ๊ฐ์ฒด ์‚ฌ์ด ์˜์กด์„ฑ์€ xmlํŒŒ์ผ์— ์ •์˜ํ•œ๋‹ค.
 → ์ž๋ฐ” ์ฝ”๋“œ์—์„  ์ด๋ฆ„์œผ๋กœ ํŠน์ •ํ•œ ๊ฐ์ฒด๋ฅผ ์š”์ฒญํ•œ๋‹ค.

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

 

๋ฐ˜์‘ํ˜•

'๐Ÿ“œ CleanCode' ์นดํ…Œ๊ณ ๋ฆฌ์˜ ๋‹ค๋ฅธ ๊ธ€

[CleanCode]์‹œ์Šคํ…œ 2  (2) 2024.10.10
[CleanCode]ํด๋ž˜์Šค 2  (1) 2024.10.08
[CleanCode]ํด๋ž˜์Šค 1  (0) 2024.10.08
[CleanCode]๋‹จ์œ„ ํ…Œ์ŠคํŠธ  (3) 2024.10.03
[CleanCode]๊ฒฝ๊ณ„ 2  (1) 2024.10.01