디자인 패턴은 미리 설계되기보다 종종 리팩터링을 통해 출현합니다 — 코드가 성장하고 그 필요가 명확해짐에 따라, 패턴을 향한 리팩터링이 설계를 개선합니다. 이는 투기적이 아니라 실제로 필요할 때 패턴을 적용한다는 원칙을 반영합니다.
패턴은 리팩터링을 통해 출현한다
패턴을 미리 설계해 넣는(종종 시기상조이거나 투기적인) 대신, 패턴은 기존 코드를
리팩터링하면서 종종 출현함:
→ 단순하게 시작 → 필요가 명확해짐에 따라(실제 복잡성, 실제 중복, 실제 변경
지점), 그것들을 다루는 패턴을 향해 리팩터링
→ 코드가 진정으로 이득을 볼 때 "패턴으로 리팩터링"
→ 시작 청사진이 아니라 리팩터링의 목적지로서의 패턴
패턴으로 리팩터링하는 예시
→ 커지는 "타입"에 대한 if/else 또는 switch → STRATEGY 또는 다형성으로 리팩터링
→ 중복된 객체 생성 로직 → FACTORY로 추출
→ 너무 많은 일을 하는 클래스(갓 오브젝트) → 책임 분할 (SRP를 향해; 클래스 추출)
→ 하드코딩된 의존성(테스트 어려움) → DEPENDENCY INJECTION 도입
→ 흩어진 복잡한 서브시스템 사용 → FACADE 도입
→ 서브클래스 폭발을 통한 행위 추가 → DECORATOR(합성)로 리팩터링
