변경으로부터 격리 상세한 구현에 의존하는 클라이언트 클래스는 구현이 바뀌면 위험에 빠진다. => 인터페이스와 추상 클래스를 사용해 구현이 미치는 영향을 격리할 수 있음 시스템 시스템 수준과 같은 높은 추상화 수준에서 깨끗함을 유지하는 방법을 살펴보자. 시스템 제작과 시스템 사용을 분리하라 시스템을 제작하는 단계(시작 단계)와 사용하는 단계를 분리하여 코드를 설계하는 것이 좋다. 만일 생성 로직과 실행 로직이 뒤섞여 있으면(ex: 초기화 지연 기법), 실행 메서드에서 생성자 인수에 의존하게 되고, 테스트 시에도 적절한 테스트 전용 객체와 실행 경로 등을 신경써야 하는 복잡성이 생긴다. 또한 실행 로직과 뒤섞인 생성 로직에서 생성하는 객체는 모든 문맥에 적합하기 어렵다. 설정 논리는 일반 실행 논리와 분리해..