๐Ÿ“œ CleanCode

[CleanCode]๊ฐ์ฒด์™€ ์ž๋ฃŒ๊ตฌ์กฐ 2

๋‰ด์ด NUEY 2024. 9. 23. 20:09
๋ฐ˜์‘ํ˜•

 

๋””๋ฏธํ„ฐ ๋ฒ•์น™
Law of Demeter
: ๋ชจ๋“ˆ์€ ์ž์‹ ์ด ์กฐ์ž‘ํ•˜๋Š” ๊ฐ์ฒด์˜ ์†์‚ฌ์ •์„ ๋ชฐ๋ผ์•ผ ํ•œ๋‹ค.
  • ๊ฐ์ฒด๋Š” ์ž๋ฃŒ๋ฅผ ์ˆจ๊ธฐ๊ณ  ํ•จ์ˆ˜๋ฅผ ๊ณต๊ฐœํ•œ๋‹ค.
  • ์ฆ‰, ๊ฐ์ฒด๋Š” ์กฐํšŒํ•จ์ˆ˜๋กœ ๋‚ด๋ถ€ ๊ตฌ์กฐ๋ฅผ ๊ณต๊ฐœํ•˜๋ฉด ์•ˆ๋œ๋‹ค๋Š” ์˜๋ฏธ๋‹ค.
  • ๋Œ€ํ‘œ์ ์ธ ํœด๋ฆฌ์Šคํ‹ฑ์ด๋‹ค.
ํœด๋ฆฌ์Šคํ‹ฑ  Heuristic
์™„๋ฒฝํ•˜์ง„ ์•Š์ง€๋งŒ, ์ผ๋ฐ˜๋ฒ•์œผ๋กœ ์ข‹์€/๊ฐ„๋‹จํ•œ ํ•ด๊ฒฐ๋ฒ•์„ ๋งํ•œ๋‹ค.
  • ์ž์„ธํ•œ ์˜ˆ์‹œ๋กœ
    ํด๋ž˜์Šค C์˜ ๋ฉ”์„œ๋“œ f๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์€ ๊ฐ์ฒด์˜ ๋ฉ”์„œ๋“œ๋งŒ ํ˜ธ์ถœํ•ด์•ผ ํ•œ๋‹ค.
    • ํด๋ž˜์Šค C
    • f ๊ฐ€ ์ƒ์„ฑํ•œ ๊ฐ์ฒด
    • f ์ธ์ˆ˜๋กœ ๋„˜์–ด์˜จ ๊ฐ์ฒด
    • C ์ธ์Šคํ„ด์Šค ๋ณ€์ˆ˜์— ์ €์žฅ๋œ ๊ฐ์ฒด
  • ํ•˜์ง€๋งŒ ์œ„ ๊ฐ์ฒด์—์„œ ํ—ˆ์šฉ๋œ ๋ฉ”์„œ๋“œ๊ฐ€ ๋ฐ˜ํ™˜ํ•˜๋Š” ๊ฐ์ฒด์˜ ๋ฉ”์„œ๋“œ๋Š” ํ˜ธ์ถœํ•˜๋ฉด ์•ˆ๋œ๋‹ค.
๋ณต์žกํ•œ ๋“ฏ์ด ๋ณด์ด์ง€๋งŒ ๋””๋ฏธํ„ฐ ๋ฒ•์น™์„ ์œ„๋ฐ˜ํ•˜๋Š” ์‚ฌ๋ก€๋งŒ ํ”ผํ•˜๋ฉด ๋œ๋‹ค.
ํด๋ž˜์Šค A→B์—์„œ ์กฐํšŒ๋ฅผ ํ–ˆ๋‹ค๋ฉด B์— ์žˆ๋Š” ์ž๋ฃŒ๋งŒ ๊ฐ€์ ธ์™€์•ผ์ง€
A→B→C์กฐํšŒ๋ฅผ ํ•˜๋ฉด ์•ˆ๋œ๋‹ค๋Š” ๊ฑฐ๋‹ค.
๋””๋ฏธํ„ฐ ๋ฒ•์น™ ์œ„๋ฐ˜ ์‚ฌ๋ก€
ํ•œ๋งˆ๋””๋กœ ์ฝ”๋“œ๊ฐ€ ๊ผฌ์ธ ์ƒํƒœ.
๊ธฐ์ฐจ ์ถฉ๋Œ Train wreck
์ด๋ ‡๊ฒŒ ์—ฌ๋Ÿฌ ๊ฐ์ฒด๊ฐ€ ํ•œ ์ค„๋กœ ์ด์–ด์ง„ ์ƒํƒœ๋ฅผ ๊ธฐ์ฐจ ์ถฉ๋Œ๋กœ ๋ถ€๋ฅธ๋‹ค. ๋‹น์—ฐํžˆ ์•ˆ ์ข‹์€ ์ฝ”๋“œ์ด๋‹ค.

์œ„ ์˜ˆ์ œ๊ฐ€ ๋งŒ์•ฝ ์ž๋ฃŒ ๊ตฌ์กฐ๋ผ์„œ ์ด๋Ÿฐ ์‹์œผ๋กœ ๊ณต๊ฐœ ๋ณ€์ˆ˜ public์„ ์‚ฌ์šฉํ•œ๋‹ค๋ฉด
๋‹ค์Œ๊ณผ ๊ฐ™์ด ๊ตฌํ˜„ํ–ˆ๋‹ค๋ฉด ๋””๋ฏธํ„ฐ ๋ฒ•์น™์„ ๋”ฐ๋ฅผ ํ•„์š”๊ฐ€ ์—†์–ด์ง„๋‹ค.

์ด ์‚ฌ๋ก€๋Š” ์ž๋ฃŒ๊ตฌ์กฐ๋Š” ๋ฌด์กฐ๊ฑด ํ•จ์ˆ˜์—†์ด ๊ณต๊ฐœ ๋ณ€์ˆ˜๋งŒ ํฌํ•จํ•˜๊ธฐ๋•Œ๋ฌธ์ด๊ณ 
๊ฐ์ฒด์—์„œ๋Š” ์•„๋‹ˆ๋‹ค.

์žก์ข…๊ตฌ์กฐ
์œ„์™€ ๊ฐ™์ด ๋””๋ฏธํ„ฐ ๋ฒ•์น™์„ ์œ„๋ฐ˜ํ•˜๋ฉด ์ฝ”๋“œ๊ฐ€ ๊ผฌ์ด๋Š” ํ˜ผ๋ž€์ด ์ƒ๊ธฐ๋Š”๋ฐ
๊ฐœ๋ฐœ์ž๋Š” ์ด ์ฝ”๋“œ๋ฅผ ํ™œ์šฉํ•˜๊ธฐ ์œ„ํ•ด ์ ˆ๋ฐ˜์€ ๊ฐ์ฒด, ์ ˆ๋ฐ˜์€ ์ž๋ฃŒ ๊ตฌ์กฐ์ธ ์žก์ข…๊ตฌ์กฐ๋ฅผ ๋งŒ๋“ค๊ฒŒ ๋œ๋‹ค.
์ด๋ ‡๊ฒŒ ๋˜๋ฉด ์ด์ „ ๊ธ€์—์„œ ์„ค๋ช…ํ–ˆ๋˜ ๋ฐ”์™€ ๊ฐ™์ด ์ƒˆ๋กœ์šด ํ•จ์ˆ˜/์ž๋ฃŒ๊ตฌ์กฐ ๋ชจ๋‘ ์ถ”๊ฐ€ํ•˜๊ธฐ ์–ด๋ ค์šด ์ƒํ™ฉ์ด ๋œ๋‹ค.

๊ทธ๋ž˜์„œ ์ •๋‹ต์€

  • ๊ฒฐ๊ตญ ๊ฐ€์ ธ์˜ค๋ ค๋Š” ๊ฒƒ์€ File Path์ด๋‹ค.
  • ์ด๋ฅผ ๊ฐ€์ ธ์˜ค๊ธฐ ์œ„ํ•œ ํ•จ์ˆ˜๋ฅผ ๊ตฌํ˜„ํ•˜๋ฉด ๋‚ด๋ถ€๊ตฌ์กฐ๋ฅผ ๋“ค์–ด๋‚ด์ง€ ์•Š์„ ์ˆ˜ ์žˆ๋‹ค.
  • ํ•จ์ˆ˜๋ฅผ ์ƒˆ๋กœ ๋งŒ๋“ค๋ฉด ๋˜๋Š” ๊ฒƒ์ด์ง€ ์ด๊ฒƒ ์ €๊ฒƒ ๋Œ์–ด๋‹ค ์“ฐ๋Š” ์ˆœ๊ฐ„ ์ฝ”๋“œ๊ฐ€ ๊ผฌ์ด๊ฒŒ ๋˜๋Š” ๊ฒƒ ๊ฐ™๋‹ค.

์ž๋ฃŒ ์ „๋‹ฌ ๊ฐ์ฒด
์ž๋ฃŒ๊ตฌ์กฐ์ฒด์˜ ์ „ํ˜•์ ์ธ ํ˜•ํƒœ๋Š” ๊ณต๊ฐœ ๋ณ€์ˆ˜๋งŒ ์žˆ๊ณ  ํ•จ์ˆ˜๊ฐ€ ์—†๋Š” ํด๋ž˜์Šค์ด๋‹ค.
DTO(Data Transfer Object)๋ผ๊ณ ๋„ ํ•œ๋‹ค.
Socket์ด๋‚˜ DB์— ์ €์žฅ๋œ ์ •๋ณด๋ฅผ ์ฝ”๋“œ์—์„œ ์‚ฌ์šฉํ•  ๊ฐ์ฒด๋กœ ๋ณ€ํ™˜ํ•˜๋Š” ๊ณผ์ •์—์„œ ์ฒซ๋ฒˆ์งธ๋กœ ์‚ฌ์šฉ๋œ๋‹ค.
๊ต‰์žฅํžˆ ์œ ์šฉํ•˜๊ฒŒ ์‚ฌ์šฉ๋œ๋‹ค.

์ข€ ๋” ์ผ๋ฐ˜์ ์ธ ํ˜•ํƒœ๋กœ๋Š” ๋นˆBean ๊ตฌ์กฐ์ด๋‹ค.
(์ด์ „์— ๋งŽ์ด ์‚ฌ์šฉ๋˜์—ˆ๋Š”๋ฐ, ์•„์ง๋„ ํ˜„์žฅ์—์„œ ๋ฆฌํŒฉํ† ๋งํ•  ๋•Œ AS-IS ์ฝ”๋“œ์—์„œ ๋งŽ์ด ๋ณด์ž…๋‹ˆ๋‹ค)
์ผ์ข…์˜ ์‚ฌ์ด๋ฒ„ ์บก์Šํ™”๋กœ ๋ณ„๋‹ค๋ฅธ ์ด์ต์€ ์ œ๊ณตํ•˜์ง€ ์•Š๋Š”๋‹ค.

DTO ์˜ˆ์‹œ

ํ™œ์„ฑ๋ ˆ์ฝ”๋“œ
DTO์˜ ํŠน์ˆ˜ํ•œ ํ˜•ํƒœ.
๋น„์ฆˆ๋‹ˆ์Šค ๊ทœ์น™ ๋ฉ”์„œ๋“œ๋ฅผ ์ถ”๊ฐ€ํ•ด ์‚ฌ์šฉํ•˜๋Š” ๊ฒฝ์šฐ๊ฐ€ ๋งŽ์€๋ฐ
์ด๋Ÿฐ ๊ฒฝ์šฐ ์žก์ข…๊ตฌ์กฐ๊ฐ€ ๋‚˜์˜ค๊ธฐ ๋•Œ๋ฌธ์— ์ถ”์ฒœํ•˜์ง€ ์•Š๋Š”๋‹ค.

 

๋ฐ˜์‘ํ˜•