πŸ“œ 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의 νŠΉμˆ˜ν•œ ν˜•νƒœ.
λΉ„μ¦ˆλ‹ˆμŠ€ κ·œμΉ™ λ©”μ„œλ“œλ₯Ό μΆ”κ°€ν•΄ μ‚¬μš©ν•˜λŠ” κ²½μš°κ°€ λ§Žμ€λ°
이런 κ²½μš° μž‘쒅ꡬ쑰가 λ‚˜μ˜€κΈ° λ•Œλ¬Έμ— μΆ”μ²œν•˜μ§€ μ•ŠλŠ”λ‹€.

 

λ°˜μ‘ν˜•