5. 유사한 코드 융합하기
5.1 유사한 클래스 통합하기
- 공통된 *상수 메서드를 가지고 있고, 반환값만 다르다면, 생성자로서 무엇을 반환할지 결정하는 식으로 클래스를 통합할수 있다.
- 통합하는 방식은 다음과 같다.
- 메소드 주위에 if(true){}를 추가한다.
- true를 기준 메서드를 호출해서 결과를 상수값과 비교하는 표현식으로 바꾼다.
- 각 클래스들의 표현식과 본문들을 else와 함께 붙여넣는다.
- 기준 메서드에 대한 상수를 생성자를 통해 필드에 할당받도록 한다.
- 상수 메소드에서 상수 대신 할당된 필드 값을 반환하도록 메서드를 변경한다.
- 문제없나 확인을 위해 컴파일한다.
- 필드 기본값을 매개변수로만든다.
- 통합 클래스중 하나를 제외한 다른 모든 클래스를 삭제하고, 모든 컴파일 오류를 삭제하지 않은 클래스로 변경해서 수정한다.
- 메소드 주위에 if(true){}를 추가한다.
- 상수 메서드* : 멤버변수를 수정할 수 없으며, 항상 동일한 상수값을 반환한다.
- 5.1 느낀점
- 기껏 if else 삭제했더니 다시 만들었다
- 5.2를 else를 가진 if를 제거한다니 두고보자.
5.2 단순한 조건 통합하기
- if문결합
- 본문이 실제로 동일한지 확인한다.
- 다음과같이 변경한다.
// Before if(expression1){ // 본문 } else if (expression2){ //동일한 본문 }
// After if(expression1 || expression2){ // 본문 }
5.3 복잡한 조건 통합하기
- 조건을 위한 산술 규칙을 사용한다.
- 이때 ||는 덧셈처럼, &&는 곱하기처럼 판단해서 결합법칙, 교환법칙, 분배법칙을 적용한다.
- 이때 조건은 순수조건 이어야 한다. 순수조건을 뽑아낼 때 캐시를 사용할 수 있다.
- 순수조건* : 조건에 변수를할당하거나 예외를발생시키거나 IO가 없는것을말한다. 순수조건이 아닌 예 : if(a = b != 0)
5.4 클래스 간의 코드 통합
- 전략패턴을 도입한다.
- 새로운 Strategy 클래스를 만든다.
- 두 클래스의 생성자에서 Strategy를 인스턴스화한다.
- 적용할 메서드를 Strategy 클래스로 이관한다.
- Strategy클래스 생성자에 의존하는 필드를 인자로 만든다
- 옮긴 코드에서 발생할 오류에대해 매개변수를 추가한다.
- 전략패턴은 주로 클래스 다이어그램(UIML 예 중 하나)을 통해 보여진다.5.5 유사 함수 통합하기
- 전략패턴 도입
- 구현에서 인터페이스 추출
- 추출할 클래스(Strategy)와 동일한 이름으로 새로운 인터페이스를 만든다.
- 인터페이스를 추출하려는 클래스의 이름을 바꾸고 새로운 인터페이스(Strategy)를 구현하게 한다.
- 컴파일 후 오류를 검토한다.5.6 유사한 코드 통합하기
- 배운것들을 이용해 코드 통합을 진행한다.느낀점
- 메서드, 클래스, 인터페이스, if문이 생겼다가 없어졌다가를 반복하니 정신이 없다는 느낌을 받았다.
- 여러번 보고 머릿속에 갈무리 할 필요가 있다.요약
- 유사클래스통합, if문 결합을 통해 클래스(코드)를 통합하자
- 조건에 부수적인 동작이 없는경우 조건부 산술을 사용할 수 있다.
- UML 클래스 다이어그램은 일반적으로 코드베이스에 대한 특정 아키텍처를 설명할 때 사용된다.
- 구현체가 하나인 인터페이스는 만들지 말자.
'독서' 카테고리의 다른 글
책01. 파이브라인즈 오브 코드 06. 데이터보호 (0) | 2024.03.03 |
---|---|
책01. 파이브라인즈 오브 코드 04. 타입 코드 처리하기 (1) | 2024.02.07 |
책01. 파이브라인즈 오브 코드 03. 긴코드 조각내기 (1) | 2024.02.01 |
책01. 파이브 라인즈 오브 코드 02. 리팩토링 깊게 들여다보기 (1) | 2024.01.31 |
책01. 파이브 라인즈 오브 코드 01. 리팩토링 리팩토링 (0) | 2024.01.31 |