독서일지/클린 코드

클린 코드 독서일지 - Day 20

Sadie Kim 2023. 11. 15. 23:30

변경으로부터 격리

상세한 구현에 의존하는 클라이언트 클래스는 구현이 바뀌면 위험에 빠진다.
=> 인터페이스와 추상 클래스를 사용해 구현이 미치는 영향을 격리할 수 있음

시스템

시스템 수준과 같은 높은 추상화 수준에서 깨끗함을 유지하는 방법을 살펴보자.

시스템 제작과 시스템 사용을 분리하라

시스템을 제작하는 단계(시작 단계)와 사용하는 단계를 분리하여 코드를 설계하는 것이 좋다.

  • 만일 생성 로직과 실행 로직이 뒤섞여 있으면(ex: 초기화 지연 기법), 실행 메서드에서 생성자 인수에 의존하게 되고, 테스트 시에도 적절한 테스트 전용 객체와 실행 경로 등을 신경써야 하는 복잡성이 생긴다.
  • 또한 실행 로직과 뒤섞인 생성 로직에서 생성하는 객체는 모든 문맥에 적합하기 어렵다.

설정 논리는 일반 실행 논리와 분리해야 모듈성이 높아진다.

Main 분리

생성과 관련된 코드는 모두 main이나 main이 호출하는 모듈로 옮기고, 나머지 시스템은 모든 객체가 생성되었고 모든 의존성이 연결되었다고 가정하는 기법

팩토리

객체가 생성되는 시점을 애플리케이션이 결정해야 할 때 사용하는 기법
=> 객체를 생성하는 코드를 분리하고(Factory), 애플리케이션에서는 객체를 생성해야 하는 시점에 생성 코드를 직접 호출하는 대신 팩토리 코드를 호출하여, 생성 코드를 알 필요 없이 생성 시점을 통제할 수 있다.