5장: 유사한 코드 융합하기
유사한 클래스 통합하기
리팩터링 패턴: 유사 클래스 통합
일련의 상수 메서드를 공통으로 가진 두개 이상의 클래스에서 이 일련의 상수 메서드가 클래스에 따라 다른 값을 반환 할 때마다
이 리팩터링 패턴을 사용해 통합할수 있다
단순한 조건 통합하기
단순한 조건은 통합한다 이건 어떠한 판단을 하지 않아도 처리할수 있는 리팩토링이다
리팩터링 패턴: if 문 결합
연속적인 if문을 결합해서 통합한다 || 연산자를 사용해서 통합한다
복잡한 조건 통합하기
조건을 위한 산술 규칙 사용
|| 연산자는 + 처럼 동작하고 && 연산자는 * 처럼 동작한다
그렇게 생각하면 결합법칙, 교환법칙, 분배법칙을 고려할수 있다
규칙: 순수 조건 사용
조건은 항상 순수 조건이어야 한다 순수라는 말은 조건에 부수적인 동작이 없다는 뜻이다
명령에서 질의 분리라는 일반적인 스멜에서 비론된다
조건 산술 적용
익숙한 산술 법칙을 사용해서 단순화 하고 다시 코드를 변환할수 있다
클래스 간의 코드 통합
클래스 관계를 묘사하기 위한 UML 클래스 다이어그램 소개
전체 프로그램에 대한 클래스 다이어그램을 만드는 것은 순식간에 거대해져서 도움이 되지 않는다
주로 디자인 패턴이나 소프트웨어 아키텍처의 작은 부분을 설명하는데 사용하기 때문에 중요한 메서드만 포함한다
리팩터링 패턴: 전략 패턴의 도입
많은 패턴이 전략 패턴의 다른 형태이다 전략이 필드를 가지고 있는 경우 이를 상태 패턴이라고 한다
규칙: 구현체가 하나뿐인 인터페이스를 만들지 말 것
구현 클래스가 하나밖에 없는 인터페이스는 가독성에 도움이 되지 않는다
인터페이스는 변형을 전제로 하는데 아무것도 없다면 오히려 가독성을 방해할수 있다
구현클래스를 수정하는 경우 인터페이스도 수정해야 해서 오버헤드를 발생시킨다
리팩터링 패턴: 구현에서 인터페이스 추출
단순한 리팩터링 인터페이스를 만드는 것을 필요할때 까지 연기할수 있어서 유용하다