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

[TIL] ν΄λ¦°μ½”λ“œ(Clean Code) - 10μž₯. 클래슀

by kjchoi 2022. 3. 9.

πŸ“Œ 였늘 TIL 3쀄 μš”μ•½

  • SRP(λ‹¨μΌμ±…μž„μ›μΉ™) : ν΄λž˜μŠ€λŠ” μž‘μ•„μ•Ό ν•˜κ³  ν΄λž˜μŠ€λŠ” μ±…μž„, 즉 λ³€κ²½ν•  μ΄μœ κ°€ ν•˜λ‚˜μ—¬μ•Ό ν•œλ‹€.
  • OCP(κ°œλ°©νμ‡„μ›μΉ™) : μƒˆ κΈ°λŠ₯을 μˆ˜μ •ν•˜κ±°λ‚˜ κΈ°μ‘΄ κΈ°λŠ₯을 λ³€κ²½ν•  λ•Œ κ±΄λ“œλ¦΄ μ½”λ“œκ°€ μ΅œμ†ŒμΈ μ‹œμŠ€ν…œ ꡬ쑰가 λ°”λžŒμ§ν•˜λ‹€. 이상적인 μ‹œμŠ€ν…œμ΄λΌλ©΄ μƒˆ κΈ°λŠ₯을 μΆ”κ°€ν•  λ•Œ μ‹œμŠ€ν…œμ„ ν™•μž₯ν•  뿐 κΈ°μ‘΄ μ½”λ“œλ₯Ό λ³€κ²½ν•˜μ§€λŠ” μ•ŠλŠ”λ‹€.
  • DIP(μ˜μ‘΄μ—­μ „μ›μΉ™) : μƒμ„Έν•œ κ΅¬ν˜„μ— μ˜μ‘΄ν•˜λŠ” ν΄λΌμ΄μ–ΈνŠΈ ν΄λž˜μŠ€λŠ” κ΅¬ν˜„μ΄ λ°”λ€Œλ©΄ μœ„ν—˜μ— 빠진닀. κ·Έλž˜μ„œ μš°λ¦¬λŠ” μΈν„°νŽ˜μ΄μŠ€μ™€ 좔상 클래슀λ₯Ό μ‚¬μš©ν•΄ κ΅¬ν˜„μ΄ λ―ΈμΉ˜λŠ” 영ν–₯을 κ²©λ¦¬ν•œλ‹€.

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

2022.03.09

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

10μž₯. 클래슀

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

  • ν΄λž˜μŠ€λŠ” μž‘μ•„μ•Ό ν•œλ‹€! ν•¨μˆ˜λŠ” 물리적인 ν–‰ 수둜 크기λ₯Ό μΈ‘μ •ν–ˆλ‹€. ν΄λž˜μŠ€λŠ” λ‹€λ₯Έ 척도λ₯Ό μ‚¬μš©ν•œλ‹€. ν΄λž˜μŠ€κ°€ 맑은 μ±…μž„μ„ μ„Όλ‹€.
  • 클래슀 이름은 ν•΄λ‹Ή 클래슀 μ±…μž„μ„ κΈ°μˆ ν•΄μ•Ό ν•œλ‹€. μ‹€μ œλ‘œ μž‘λͺ…은 클래슀 크기λ₯Ό μ€„μ΄λŠ” 첫 번째 관문이닀. κ°„κ²°ν•œ 이름이 λ– μ˜€λ₯΄μ§€ μ•ŠλŠ”λ‹€λ©΄ ν•„κ²½ 클래슀 크기가 λ„ˆλ¬΄ μ»€μ„œ κ·Έλ ‡λ‹€. 클래슀 이름이 λͺ¨ν˜Έν•˜λ‹€λ©΄ ν•„κ²½ 클래슀 μ±…μž„μ΄ λ„ˆλ¬΄ λ§Žμ•„μ„œλ‹€.
  • λ‹¨μΌμ±…μž„μ›μΉ™(Single Responsibility Principle, SRP) : ν΄λž˜μŠ€λ‚˜ λͺ¨λ“ˆμ„ λ³€κ²½ν•  μ΄μœ κ°€ ν•˜λ‚˜, 단 ν•˜λ‚˜λΏμ΄μ–΄μ•Ό ν•œλ‹€λŠ” 원칙이닀. SRPλŠ” 'μ±…μž„'μ΄λΌλŠ” κ°œλ…μ„ μ •μ˜ν•˜λ©° μ μ ˆν•œ 클래슀 크기λ₯Ό μ œμ‹œν•œλ‹€. ν΄λž˜μŠ€λŠ” μ±…μž„, 즉 λ³€κ²½ν•  μ΄μœ κ°€ ν•˜λ‚˜μ—¬μ•Ό ν•œλ‹€λŠ” μ˜λ―Έλ‹€.
  • 큰 클래슀 λͺ‡ κ°œκ°€ μ•„λ‹ˆλΌ μž‘μ€ 클래슀 μ—¬λŸΏμœΌλ‘œ 이뀄진 μ‹œμŠ€ν…œμ΄ 더 λ°”λžŒμ§ν•˜λ‹€. μž‘μ€ ν΄λž™μŠ€λŠ” 각자 맑은 μ±…μž„μ΄ ν•˜λ‚˜λ©°, λ³€κ²½ν•  μ΄μœ κ°€ ν•˜λ‚˜λ©°, λ‹€λ₯Έ μž‘μ€ ν΄λž˜μŠ€μ™€ ν˜‘λ ₯ν•΄ μ‹œμŠ€ν…œμ— ν•„μš”ν•œ λ™μž‘μ„ μˆ˜ν–‰ν•œλ‹€.
  • 응집도(Cohesion) : ν΄λž˜μŠ€λŠ” μΈμŠ€ν„΄μŠ€ λ³€μˆ˜ μˆ˜κ°€ μž‘μ•„μ•Ό ν•œλ‹€. 각 클래슀 λ©”μ„œλ“œλŠ” 클래슀 μΈμŠ€ν„΄μŠ€ λ³€μˆ˜λ₯Ό ν•˜λ‚˜ 이상 μ‚¬μš©ν•΄μ•Ό ν•œλ‹€. 일반적으둜 λ©”μ„œλ“œκ°€ λ³€μˆ˜λ₯Ό 더 많이 μ‚¬μš©ν• μˆ˜λ‘ λ©”μ„œλ“œμ™€ ν΄λž˜μŠ€λŠ” 응집도가 더 λ†’λ‹€. λͺ¨λ“  μΈμŠ€ν„΄μŠ€ λ³€μˆ˜λ₯Ό λ©”μ„œλ“œλ§ˆλ‹€ μ‚¬μš©ν•˜λŠ” ν΄λž˜μŠ€λŠ” 응집도가 κ°€μž₯ λ†’λ‹€.
  • 응집도λ₯Ό μœ μ§€ν•˜λ©΄ μž‘μ€ 클래슀 μ—¬λŸΏμ΄ λ‚˜μ˜¨λ‹€ : 큰 ν•¨μˆ˜λ₯Ό μž‘μ€ ν•¨μˆ˜ μ—¬λŸΏμœΌλ‘œ μͺΌκ°œλ‹€ 보면 μ’…μ’… μž‘μ€ 클래슀 μ—¬λŸΏμœΌλ‘œ μͺΌκ°€ κΈ°νšŒκ°€ 생긴닀. κ·ΈλŸ¬λ©΄μ„œ ν”„λ‘œκ·Έλž¨μ— 점점 더 체계가 작히고 ꡬ쑰가 투λͺ…해진닀.
  • OCP(Open-Closed Principle) : ν΄λž˜μŠ€λŠ” ν™•μž₯에 개방적이고 μˆ˜μ •μ— 폐쇄적이어야 ν•œλ‹€λŠ” 객체 지ν–₯ μ„€κ³„μ˜ 핡심 원칙
  • λ³€κ²½ν•˜κΈ° μ‰¬μš΄ 클래슀 : μƒˆ κΈ°λŠ₯을 μˆ˜μ •ν•˜κ±°λ‚˜ κΈ°μ‘΄ κΈ°λŠ₯을 λ³€κ²½ν•  λ•Œ κ±΄λ“œλ¦΄ μ½”λ“œκ°€ μ΅œμ†ŒμΈ μ‹œμŠ€ν…œ ꡬ쑰가 λ°”λžŒμ§ν•˜λ‹€. 이상적인 μ‹œμŠ€ν…œμ΄λΌλ©΄ μƒˆ κΈ°λŠ₯을 μΆ”κ°€ν•  λ•Œ μ‹œμŠ€ν…œμ„ ν™•μž₯ν•  뿐 κΈ°μ‘΄ μ½”λ“œλ₯Ό λ³€κ²½ν•˜μ§€λŠ” μ•ŠλŠ”λ‹€.
  • DIP(Dependency Inversion Principle) : ν΄λž˜μŠ€κ°€ μƒμ„Έν•œ κ΅¬ν˜„μ΄ μ•„λ‹ˆλΌ 좔상화에 μ˜μ‘΄ν•΄μ•Ό ν•œλ‹€λŠ” 원칙
  • λ³€κ²½μœΌλ‘œλΆ€ν„° 격리 : μš”κ΅¬μ‚¬ν•­μ€ λ³€ν•˜κΈ° λ§ˆλ ¨μ΄λ‹€. λ”°λΌμ„œ μ½”λ“œλ„ λ³€ν•˜κΈ° λ§ˆλ ¨μ΄λ‹€. 객체 지ν–₯ ν”„λ‘œκ·Έλž˜λ° μž…λ¬Έμ—μ„œ μš°λ¦¬λŠ” ꡬ체적인(concrete) ν΄λž˜μŠ€μ™€ 좔상(abstract) ν΄λž˜μŠ€κ°€ μžˆλ‹€κ³  λ°°μ› λ‹€. ꡬ체적인 ν΄λž˜μŠ€λŠ” μƒμ„Έν•œ κ΅¬ν˜„(μ½”λ“œ)을 ν¬ν•¨ν•˜λ©° 좔상 ν΄λž˜μŠ€λŠ” κ°œλ…λ§Œ ν¬ν•¨ν•œλ‹€κ³ λ„ λ°°μ› λ‹€. μƒμ„Έν•œ κ΅¬ν˜„μ— μ˜μ‘΄ν•˜λŠ” ν΄λΌμ΄μ–ΈνŠΈ ν΄λž˜μŠ€λŠ” κ΅¬ν˜„μ΄ λ°”λ€Œλ©΄ μœ„ν—˜μ— 빠진닀. κ·Έλž˜μ„œ μš°λ¦¬λŠ” μΈν„°νŽ˜μ΄μŠ€μ™€ 좔상 클래슀λ₯Ό μ‚¬μš©ν•΄ κ΅¬ν˜„μ΄ λ―ΈμΉ˜λŠ” 영ν–₯을 κ²©λ¦¬ν•œλ‹€.

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

  • Java/Spring μ›Ή 개발 곡뢀λ₯Ό ν•˜λ©΄μ„œ 객체지ν–₯ 섀계 원칙에 λŒ€ν•΄ κ³΅λΆ€ν•œμ μ΄ μžˆλŠ”λ° 이번 클래슀 νŒŒνŠΈμ—μ„œ μ„€λͺ…ν•˜κ³  μžˆλŠ” λŒ€λΆ€λΆ„μ˜ λ‚΄μš©μ΄ κ³΅λΆ€ν–ˆλ˜ λ‚΄μš©κ³Ό 동일 선상에 μžˆλŠ” λ‚΄μš©μ΄μ—ˆλ‹€. 전에 곡뢀할 λ•ŒλŠ” μš©μ–΄λ„ λ‚―μ„€κ³  잘 μ™Έμ›Œμ§€μ§€λ„ μ•Šκ³  κ·Έλž¬λŠ”λ° μžμ„Έν•œ μ„€λͺ…κ³Ό ν•¨κ»˜ λ°°μš°λ‹€λ³΄λ‹ˆ μ§€λ‚œλ²ˆ 보닀 더 잘 μ΄ν•΄ν•˜κ²Œ 된 것 κ°™λ‹€. ν•˜μ§€λ§Œ 이건 λ‹¨μˆœνžˆ μ§€μ‹λ§Œ μŒ“μΈ 것이고 μ‹€μ œ 섀계도 ν•˜κ³  κ°œλ°œλ„ ν•˜λ©΄μ„œ 계속 μ΅ν˜€λ‚˜κ°€μ•Ό 정말 λ‚΄ κ²ƒμœΌλ‘œ λ§Œλ“€ 수 μžˆμ„ 것 κ°™λ‹€.

πŸ”Ž 였늘 읽은 λ‹€λ₯Έ μ‚¬λžŒμ˜ TIL

λŒ“κΈ€0