CHAPTER 8 코드를 모듈화하라

좋은코드 나쁜코드: 프로그래머의 코드 품질 개선법(PART II 실전)

CHAPTER 8 코드를 모듈화하라

모듈화의 목적

  • 코드가 어떻게 변경되거나 재구성 될지 모르는 상태에서 변경가 재구성이 용이한 코드를 작성

8.1 의존성 주입의 사용을 고려하라

일반적으로 클래스는 다른 클래스에 의존한다

  • 하드 코드화된 의존성은 문제가 될 수 있다
    • 의존성 주입을 사용하라
      • 의존성 주입 프레임 워크
    • 의존성 주입을 염두에두고 코드를 설계하라

8.2 인터페이스에 의존하라

  • 구체적인 구현에 의존하면 적응성이 제한된다
    • 가능한 경우 인터페이스에 의존하라

8.3 클래스 상속을 주의하라

  • 클래스 상속은 문제가 될수 있다
    • 상속은 추상화 계층에 방해가 될수 있다
    • 상속은 적응성 높은 코드의 작성을 어렵게 만들 수 있다
  • 해결책
    • 구성을 사용하라
      • 더 간결한 추상화 계층
      • 적응성이 높은 코드
  • 진정한 is-a 관계는 어떤가
    • 취약한 베이스 클래스 문제
    • 다이아몬드 문제(다중상속)
    • 문제가 있는 계층 구조
      • 인터페이스를 사용하여 계층 구조를 정의
      • 구성을 사용하여 코드를 재사용

8.4 클래스는 자신의 기능에만 집중해야 한다

  • 다른 클래스와 지나치게 연관되어 있으면 문제가 될수 있다
  • 해결책
    • 자신의 기능에만 충실한 클래스를 만들라
    • 디미터의 법칙

8.5 관련 있는 데이터는 함께 캡슐화하라

  • 캡슐화되지 않은 데이터는 취급하기 어려울 수 있다
    • 관련된 데이터는 객체 또는 클래스로 그룹화하라

8.6 반환 유형에 구현 세부 정보가 유출되지 않도록 주의하라

  • 반환 형식에 구현 세부 사항이 유출될 경우 문제가 될수 있다
    • 해결책
      • 추상화 계층에 적합한 유형을 반환하라

8.7 예외 처리 시 구현 세부 사항이 유출되지 않도록 주의하라

  • 예외 처리시 구현 세부 사항이 유출되면 문제가 될 수 있다
  • 해결책
    • 추상화 계층에 적절한 예외를 만들라

참조