λ³Έλ¬Έ λ°”λ‘œκ°€κΈ°
μΉ΄ν…Œκ³ λ¦¬ μ—†μŒ

[TIL] ν΄λ¦°μ½”λ“œ(Clean Code) - 6μž₯. 객체와 자료 ꡬ쑰

by kjchoi 2022. 3. 1.

πŸ“† TIL (Today I Learned) λ‚ μ§œ

2022.03.01

πŸ“š 였늘 읽은 λ²”μœ„

6μž₯. 객체와 자료 ꡬ쑰

πŸ“ μ±…μ—μ„œ κΈ°μ–΅ν•˜κ³  싢은 λ‚΄μš©

  • 자료 좔상화 : λ³€μˆ˜ 사이에 ν•¨μˆ˜λΌλŠ” 계측을 λ„£λŠ”λ‹€κ³  κ΅¬ν˜„μ΄ μ €μ ˆλ‘œ κ°μΆ°μ§€μ§€λŠ” μ•ŠλŠ”λ‹€. κ΅¬ν˜„μ„ 감좔렀면 좔상화가 ν•„μš”ν•˜λ‹€! κ·Έμ € (ν˜•μ‹ 논리에 치우쳐) 쑰회 ν•¨μˆ˜μ™€ μ„€μ • ν•¨μˆ˜λ‘œ λ³€μˆ˜λ₯Ό 닀룬닀고 ν΄λž˜μŠ€κ°€ λ˜μ§€λŠ” μ•ŠλŠ”λ‹€. κ·Έλ³΄λ‹€λŠ” 좔상 μΈν„°νŽ˜μ΄μŠ€λ₯Ό μ œκ³΅ν•΄ μ‚¬μš©μžκ°€ κ΅¬ν˜„μ„ λͺ¨λ₯Έ 채 자료의 핡심을 μ‘°μž‘ν•  수 μžˆμ–΄μ•Ό μ§„μ •ν•œ 의미의 ν΄λž˜μŠ€λ‹€. (p.119)
  • 자료/객체 λΉ„λŒ€μΉ­ : λ³΅μž‘ν•œ μ‹œμŠ€ν…œμ„ μ§œλ‹€ 보면 μƒˆλ‘œμš΄ ν•¨μˆ˜κ°€ μ•„λ‹ˆλΌ μƒˆλ‘œμš΄ 자료 νƒ€μž…μ΄ ν•„μš”ν•œ κ²½μš°κ°€ 생긴닀. μ΄λ•ŒλŠ” ν΄λž˜μŠ€μ™€ 객체 지ν–₯ 기법이 κ°€μž₯ μ ν•©ν•˜λ‹€. 반면, μƒˆλ‘œμš΄ 자료 νƒ€μž…μ΄ μ•„λ‹ˆλΌ μƒˆλ‘œμš΄ ν•¨μˆ˜κ°€ ν•„μš”ν•œ κ²½μš°λ„ 생긴닀. μ΄λ•ŒλŠ” 절차적인 μ½”λ“œμ™€ 자료 ꡬ쑰가 μ’€ 더 μ ν•©ν•˜λ‹€. 뢄별 μžˆλŠ” ν”„λ‘œκ·Έλž˜λ¨ΈλŠ” λͺ¨λ“  것이 κ°μ²΄λΌλŠ” 생각이 λ―Έμ‹ μž„μ„ 잘 μ•ˆλ‹€. λ•Œλ‘œλŠ” λ‹¨μˆœν•œ 자료 ꡬ쑰와 절차적인 μ½”λ“œκ°€ κ°€μž₯ μ ν•©ν•œ 상황도 μžˆλ‹€. (p.122)
  • λ””λ―Έν„° 법칙은 잘 μ•Œλ €μ§„ νœ΄λ¦¬μŠ€ν‹±(heuristic)으둜, λͺ¨λ“ˆμ€ μžμ‹ μ΄ μ‘°μž‘ν•˜λŠ” 객체의 속사정을 λͺ°λΌμ•Ό ν•œλ‹€λŠ” 법칙이닀. κ°μ²΄λŠ” 자료λ₯Ό 숨기고 ν•¨μˆ˜λ₯Ό κ³΅κ°œν•œλ‹€. 즉, κ°μ²΄λŠ” 쑰회 ν•¨μˆ˜λ‘œ λ‚΄λΆ€ ꡬ쑰λ₯Ό κ³΅κ°œν•˜λ©΄ μ•ˆ λœλ‹€λŠ” μ˜λ―Έλ‹€. 그러면 λ‚΄λΆ€ ꡬ쑰λ₯Ό (μˆ¨κΈ°μ§€ μ•Šκ³ ) λ…ΈμΆœν•˜λŠ” μ…ˆμ΄λ‹ˆκΉŒ. (p.123)
  • μž‘μ’… ꡬ쑰 : μ ˆλ°˜μ€ 객체, μ ˆλ°˜μ€ 자료ꡬ쑰인 ν˜•νƒœ. μ€‘μš”ν•œ κΈ°λŠ₯을 μˆ˜ν–‰ν•˜λŠ” ν•¨μˆ˜λ„ 있고, 곡개 λ³€μˆ˜λ‚˜ 곡개 쑰회/μ„€μ • ν•¨μˆ˜λ„ μžˆλ‹€. 곡개 쑰회/μ„€μ • ν•¨μˆ˜λŠ” λΉ„κ³΅κ°œ λ³€μˆ˜λ₯Ό κ·ΈλŒ€λ‘œ λ…ΈμΆœν•œλ‹€. 이런 μž‘μ’… κ΅¬μ‘°λŠ” μƒˆλ‘œμš΄ ν•¨μˆ˜λŠ” 물둠이고 μƒˆλ‘œμš΄ 자료 ꡬ쑰도 μΆ”κ°€ν•˜κΈ° μ–΄λ ΅λ‹€. μ–‘μͺ½ μ„Έμƒμ—μ„œ λ‹¨μ λ§Œ λͺ¨μ•„놓은 ꡬ쑰닀. κ·ΈλŸ¬λ―€λ‘œ μž‘μ’… κ΅¬μ‘°λŠ” λ˜λ„λ‘ ν”Όν•˜λŠ” 편이 μ’‹λ‹€. ν”„λ‘œκ·Έλž˜λ¨Έκ°€ ν•¨μˆ˜λ‚˜ νƒ€μž…μ„ λ³΄ν˜Έν• μ§€ κ³΅κ°œν• μ§€ ν™•μ‹ ν•˜μ§€ λͺ»ν•΄ (더 λ‚˜μ˜κ²ŒλŠ” 무지해) μ–΄μ€‘κ°„ν•˜κ²Œ 내놓은 섀계에 λΆˆκ³Όν•˜λ‹€. (p.124)
  • ꡬ쑰체 감좔기 : 객체라면 λ­”κ°€λ₯Ό ν•˜λΌκ³  말해야지 속을 λ“œλŸ¬λ‚΄λΌκ³  λ§ν•˜λ©΄ μ•ˆ λœλ‹€. (p.125)
  • 자료 전달 객체 : 자료 ꡬ쑰체의 μ „ν˜•μ μΈ ν˜•νƒœλŠ” 곡개 λ³€μˆ˜λ§Œ 있고 ν•¨μˆ˜κ°€ μ—†λŠ” ν΄λž˜μŠ€λ‹€. 이런 자료 ꡬ쑰체λ₯Ό λ•Œλ‘œλŠ” 자료 전달 객체(Data Transfer Object, DTO)라 ν•œλ‹€. DTOλŠ” ꡉμž₯히 μœ μš©ν•œ ꡬ쑰체닀. 특히 λ°μ΄ν„°λ² μ΄μŠ€μ™€ ν†΅μ‹ ν•˜κ±°λ‚˜ μ†ŒμΌ“μ—μ„œ 받은 λ©”μ‹œμ§€μ˜ ꡬ문을 뢄석할 λ•Œ μœ μš©ν•˜λ‹€. ν”νžˆ DTOλŠ” λ°μ΄ν„°λ² μ΄μŠ€μ— μ €μž₯된 κ°€κ³΅λ˜μ§€ μ•Šμ€ 정보λ₯Ό μ• ν”Œλ¦¬μΌ€μ΄μ…˜ μ½”λ“œμ—μ„œ μ‚¬μš©ν•  객체둜 λ³€ν™˜ν•˜λŠ” 일련의 λ‹¨κ³„μ—μ„œ κ°€μž₯ 처음으둜 μ‚¬μš©ν•˜λŠ” ꡬ쑰체닀. (p.126)
  • ν™œμ„± λ ˆμ½”λ“œ : ν™œμ„± λ ˆμ½”λ“œλŠ” λ°μ΄ν„°λ² μ΄μŠ€ ν…Œμ΄λΈ”μ΄λ‚˜ λ‹€λ₯Έ μ†ŒμŠ€μ—μ„œ 자료λ₯Ό 직접 λ³€ν™˜ν•œ κ²°κ³Όλ‹€. λΆˆν–‰νžˆλ„ ν™œμ„± λ ˆμ½”λ“œμ— λΉ„μ¦ˆλ‹ˆμŠ€ κ·œμΉ™ λ©”μ„œλ“œλ₯Ό μΆ”κ°€ν•΄ 이런 자료 ꡬ쑰λ₯Ό 객체둜 μ·¨κΈ‰ν•˜λŠ” κ°œλ°œμžκ°€ ν”ν•˜λ‹€. ν•˜μ§€λ§Œ μ΄λŠ” λ°”λžŒμ§ν•˜μ§€ μ•Šλ‹€. 그러면 자료 ꡬ쑰도 μ•„λ‹ˆκ³  객체도 μ•„λ‹Œ μž‘μ’… ꡬ쑰가 λ‚˜μ˜€κΈ° λ•Œλ¬Έμ΄λ‹€. 해결책은 λ‹Ήμ—°ν•˜λ‹€. ν™œμ„± λ ˆμ½”λ“œλŠ” 자료 ꡬ쑰둜 μ·¨κΈ‰ν•œλ‹€. λΉ„μ¦ˆλ‹ˆμŠ€ κ·œμΉ™μ„ λ‹΄μœΌλ©΄μ„œ λ‚΄λΆ€ 자료λ₯Ό μˆ¨κΈ°λŠ” κ°μ²΄λŠ” λ”°λ‘œ μƒμ„±ν•œλ‹€. (μ—¬κΈ°μ„œ λ‚΄λΆ€ μžλ£ŒλŠ” ν™œμ„± λ ˆμ½”λ“œμ˜ μΈμŠ€ν„΄μŠ€μΌ κ°€λŠ₯성이 λ†’λ‹€.) (p.127)
  • κ°μ²΄λŠ” λ™μž‘μ„ κ³΅κ°œν•˜κ³  자료λ₯Ό μˆ¨κΈ΄λ‹€. κ·Έλž˜μ„œ κΈ°μ‘΄ λ™μž‘μ„ λ³€κ²½ν•˜μ§€ μ•ŠμœΌλ©΄μ„œ μƒˆ 객체 νƒ€μž…μ„ μΆ”κ°€ν•˜κΈ°λŠ” μ‰¬μš΄ 반면, κΈ°μ‘΄ 객체에 μƒˆ λ™μž‘μ„ μΆ”κ°€ν•˜κΈ°λŠ” μ–΄λ ΅λ‹€. 자료 κ΅¬μ‘°λŠ” 별닀λ₯Έ λ™μž‘ 없이 자료λ₯Ό λ…ΈμΆœν•œλ‹€. κ·Έλž˜μ„œ κΈ°μ‘΄ 자료 ꡬ쑰에 μƒˆλ™μž‘μ„ μΆ”κ°€ν•˜κΈ°λŠ” μ‰¬μš°λ‚˜, κΈ°μ‘΄ ν•¨μˆ˜μ— μƒˆ 자료 ꡬ쑰λ₯Ό μΆ”κ°€ν•˜κΈ°λŠ” μ–΄λ ΅λ‹€. (p.127)
  • (μ–΄λ–€) μ‹œμŠ€ν…œμ„ κ΅¬ν˜„ν•  λ•Œ, μƒˆλ‘œμš΄ 자료 νƒ€μž…μ„ μΆ”κ°€ν•˜λŠ” μœ μ—°μ„±μ΄ ν•„μš”ν•˜λ©΄ 객체가 더 μ ν•©ν•˜λ‹€. λ‹€λ₯Έ 경우둜 μƒˆλ‘œμš΄ λ™μž‘μ„ μΆ”κ°€ν•˜λŠ” μœ μ—°μ„±μ΄ ν•„μš”ν•˜λ©΄ 자료 ꡬ쑰와 절차적인 μ½”λ“œκ°€ 더 μ ν•©ν•˜λ‹€. μš°μˆ˜ν•œ μ†Œν”„νŠΈμ›¨μ–΄ κ°œλ°œμžλŠ” 편견 없이 이 사싀을 이해해 μ§λ©΄ν•œ λ¬Έμ œμ— 졜적인 해결책을 μ„ νƒν•œλ‹€. (p.128)

πŸ˜€ 였늘 읽은 μ†Œκ° 및 λ– μ˜€λ₯΄λŠ” 생각

  • ν‰μ†Œ 생각해본적도 μ—†μ—ˆκ³  κ·Έλž˜μ„œ 객체와 자료 ꡬ쑰체의 큰 차이점을 λͺ°λžλŠ”데 객체와 자료 ꡬ쑰체에 λŒ€ν•΄ 잘 μ•Œκ²Œ λ˜λŠ” μ‹œκ°„μ΄μ—ˆλ‹€.
  • 사싀 VO(Value Object)λ‚˜ DTO(Data Transfer Object)λ₯Ό 보톡 μ‹€λ¬΄μ—μ„œ κ·Έλƒ₯ μ“°λ‹ˆκΉŒ 생각 없이 κ·Έλƒ₯ μΌμ—ˆλŠ”λ° 이런 의미둜 μ“°λŠ” κ²ƒμ΄μ—ˆκ΅¬λ‚˜λ₯Ό μ•Œκ²Œ 됐닀. μ°Έ 생각 없이 μ œλŒ€λ‘œ μ•Œμ§€λ„ λͺ»ν•˜κ³  μ‚΄μ•˜κ΅¬λ‚˜ ν•˜λŠ” 생각이 λ“€μ—ˆλ‹€.
  • 객체도 μ•„λ‹ˆκ³  자료 ꡬ쑰도 μ•„λ‹Œ μž‘μ’… ꡬ쑰λ₯Ό λ§Œλ“€μ–΄λ‚΄μ§€ μ•Šλ„λ‘ μœ μ˜ν•΄μ•Όκ² λ‹€. μ§€κΈˆλ„ μΆ©λΆ„νžˆ 이런 μž‘μ’… ꡬ쑰λ₯Ό 많이 μ ‘ν•˜κ³  μžˆλŠ” 것 κ°™λ‹€.
  • λ§Žμ€ μ‚¬λžŒλ“€μ΄ 객체 지ν–₯이 λŒ€μ„Έμ΄κ³  객체 지ν–₯이 졜고라고 μ™ΈμΉœλ‹€κ³  ν•΄μ„œ 무쑰건적으둜 객체 지ν–₯ ν•œκ°€μ§€ κΈ°λ²•λ§Œ 좔ꡬ할 것이 μ•„λ‹ˆλΌ 상황에 따라 자료 ꡬ쑰와 절차적인 μ½”λ“œ μž‘μ„± 기법을 μ‚¬μš©ν•˜λŠ” λ“± 상황에 λ§žλŠ” κ΅¬ν˜„ 방식을 μ„ νƒν•˜λŠ” 것이 더 효율적이고 λ°”λžŒμ§ν•œ ν–‰λ™μ΄λΌλŠ” 생각이 λ“€μ—ˆλ‹€.
  • μš”μ¦˜ λ””μžμΈ νŒ¨ν„΄μ„ 잘 λͺ¨λ₯΄λŠ” 것 κ°™μ•„ 곡뢀λ₯Ό μ’€ ν•˜κ³  μžˆμ—ˆλŠ”λ° λ””μžμΈ νŒ¨ν„΄μ„ 더 μ—΄μ‹¬νžˆ 곡뢀 ν•΄μ•Όκ² λ‹€λŠ” 생각이 λ“€μ—ˆλ‹€. λ””μžμΈ νŒ¨ν„΄μ„ 잘 μ•Œμ•„μ•Ό 객체도 잘 μ“Έ 수 있고 자료 ꡬ쑰체에 λŒ€ν•΄μ„œλ„ 잘 μ•Œ 수 μžˆμ„ 것 κ°™λ‹€.

πŸ€” κΆκΈˆν•œ λ‚΄μš© 및 잘 μ΄ν•΄λ˜μ§€ μ•ŠλŠ” λ‚΄μš©

  • λ””λ―Έν„° 법칙 : μ±… λ‚΄μš©μƒ μ–΄λ–€ 것을 λ§ν•˜κ³  μžˆλŠ”μ§€λŠ” μ•Œκ² μœΌλ‚˜ 더 μžμ„ΈνžˆλŠ” 잘 λͺ¨λ₯΄κ² λ‹€. 이미 μ•Œκ³  μžˆλŠ” 것을 μ–˜κΈ°ν•˜κ³  μžˆλŠ” 것 같기도 ν•΄μ„œ μ§€κΈˆλ³΄λ‹€ 더 많이 κΆκΈˆν•΄μ§€λ©΄ κ·Έλ•Œ μžμ„Ένžˆ 찾아보도둝 ν•΄μ•Όκ² λ‹€. λ””μžμΈ νŒ¨ν„΄ 곡뢀λ₯Ό λ¨Όμ € ν•˜κ³ λ‚˜λ©΄ λ””λ―Έν„° 법칙에 λŒ€ν•΄ 더 잘 이해할 수 μžˆμ„ 것 κ°™λ‹€λŠ” 생각이 자꾸 λ“œλŠ” μ΄μœ λŠ” λ¬΄μ—‡μΌκΉŒ?

λŒ“κΈ€0