내 코드가 그렇게 이상한가요? 5장 응집도: 흩어져 있는 것들

2025. 3. 4. 20:41개발서적 스터디/내 코드가 그렇게 이상한가요?

응집도란 모듈 내부에 있는 데이터와 로직 사이의 관계가 얼마나 강한지 나타내는 지표

  • 응집도가 높은 구조는 변경하기 쉬우며 바람직한 구조

5.1 Static 메소드 오용

  • 데이터와 관련 로직을 모은다
  • static 메소드는 언제 사용하는게 좋을까?
    • 아마 companion object 로 봤을 때? 응집도의 영향을 받지 않는 경우 예를들어 로그 출력, 포맷 변환

5.2 초기화 로직 분산

  • 생성자를 Private 로 구현
  • 생성 로직이 너무 많아질 경우 생성 전용 팩토리 클래스로 분리

5.3 범용 처리 클래스(Common/Util)

  • 너무 많은 로직이 한 클래스에 모이는 문제
    • 범용 이란 이름 자체로 범용적으로 사용하고 싶은 로직은 Common 에 모아두면 되겠다 생각
    • 꼭 필요한 경우가 아니라면 범 용 처리 클래스를 만들지 않는것이 좋음
  • 횡단 관심사
    • 횡단 관심사 : 다양한 상황에서 넓게 활용되는 기능
      • 로그 출력, 오류 확인, 디버깅, 예외 처리, 캐시, 동기화, 분산 처리
    • 횡단 관심사의 경우 범용으로 처리해도 됨

5.4 결과를 리턴하는 데 매개변수 사용하지 않기

출력 매개변수(출력에 사용되는 매개변수)는 응집도를 낮추는 원인이 됨

5.5 매개변수가 너무 많은 경우

  • 매개 변수가 너무 많은 경우 응집도가 낮아지기 쉽다
  • 매개 변수가 많다는건 해당 함수에서 많은 기능을 하고 싶다는 의미 → 로직이 복잡해지거나 중복코드 발생의 원인이 됨
  • 너무 많은 매개 변수를 데이터 클래스로 만들어 응집도 높이기

5.6 메서드 체인

  • 메서드 체인 : 여러 메서드를 연결해서 리턴 값의 요소에 차례차례 접근하는 방법
  • 응집도를 낮출 수 있어 좋지 않은 방식

→ 묻지 말고 명령하기 (Tell, Don’t Ask)

  • 다른 객체의 내부 상태를 기반으로 판단하거나 제어하려 하지 말고 메서드로 명령해서 객체가 알아서 판단하고 제어하도록 설계하기
  • 인스턴스 변수를 private 로 설정하여 외부에서 접근할 수 없도록 해야 함