좋은코드 나쁜코드: 프로그래머의 코드 품질 개선법(PART II 실전)
CHAPTER 8 코드를 모듈화하라
모듈화의 목적
- 코드가 어떻게 변경되거나 재구성 될지 모르는 상태에서 변경가 재구성이 용이한 코드를 작성
8.1 의존성 주입의 사용을 고려하라
일반적으로 클래스는 다른 클래스에 의존한다
- 하드 코드화된 의존성은 문제가 될 수 있다
- 의존성 주입을 사용하라
- 의존성 주입 프레임 워크
- 의존성 주입을 염두에두고 코드를 설계하라
- 의존성 주입을 사용하라
8.2 인터페이스에 의존하라
- 구체적인 구현에 의존하면 적응성이 제한된다
- 가능한 경우 인터페이스에 의존하라
8.3 클래스 상속을 주의하라
- 클래스 상속은 문제가 될수 있다
- 상속은 추상화 계층에 방해가 될수 있다
- 상속은 적응성 높은 코드의 작성을 어렵게 만들 수 있다
- 해결책
- 구성을 사용하라
- 더 간결한 추상화 계층
- 적응성이 높은 코드
- 구성을 사용하라
- 진정한 is-a 관계는 어떤가
- 취약한 베이스 클래스 문제
- 다이아몬드 문제(다중상속)
- 문제가 있는 계층 구조
- 인터페이스를 사용하여 계층 구조를 정의
- 구성을 사용하여 코드를 재사용
8.4 클래스는 자신의 기능에만 집중해야 한다
- 다른 클래스와 지나치게 연관되어 있으면 문제가 될수 있다
- 해결책
- 자신의 기능에만 충실한 클래스를 만들라
- 디미터의 법칙
8.5 관련 있는 데이터는 함께 캡슐화하라
- 캡슐화되지 않은 데이터는 취급하기 어려울 수 있다
- 관련된 데이터는 객체 또는 클래스로 그룹화하라
8.6 반환 유형에 구현 세부 정보가 유출되지 않도록 주의하라
- 반환 형식에 구현 세부 사항이 유출될 경우 문제가 될수 있다
- 해결책
- 추상화 계층에 적합한 유형을 반환하라
- 해결책
8.7 예외 처리 시 구현 세부 사항이 유출되지 않도록 주의하라
- 예외 처리시 구현 세부 사항이 유출되면 문제가 될 수 있다
- 해결책
- 추상화 계층에 적절한 예외를 만들라