본문 바로가기

BOOK

[Refacotoring] - 마틴 파울러

1. 함수 추출하기 - 함수 인라인하기

2. 변수 추출하기 - 변수 인라인하기

3. 변수 캡슐화하기

4. 변수 이름 바꾸기

5. 상수 이름 바꾸기

6. 매개변수 객체 만들기

7. 여러 함수를 클래스로 묶기

8. 단계 쪼개기 -> 명확한 경계설정, 분리

 

 

캡슐화

7.1 레코드 캡술화하기 : 가변데이터를 저장하는 용도 -> 객체 선호(어떻게 저장했는지 숨긴채 세 가지 값을 각각의 메소드로 제공)

7.2 컬렉션 캡슐화하기

7.3 기본형을 객체로 바꾸기

7.4 임시 변수를 질의 함수로 바꾸기

7.5 위임 숨기기

(1) 위임 객체의 각 메서드에 해당 하는 위임 메서드를 서버에 생성한다.

(2) 클라이언트가 위임 객체 대신 서버를 호출하도록 수정한다. 하나씩 바꿀 때마다 테스트한다.

(3) 모두 수정했다면, 서버로부터 위임 객체를 얻는 접근자를 제거한다.

(4) 테스트한다.

7.9 알고리즘 교체하기

(1) 교체할 코드를 함수 하나에 모은다

(2) 이 함수만을 이용해 동작을 검증하는 테스트를 마련한다

(3) 대체할 알고리즘을 준비한다

(4) 정적 검사를 수행한다

(5) 기존 알고리즘과 새 알고리즘의 결과를 비교하는 테스트를 수행한다. 두 결과가 같다면 리팩토링이 끝난다.

그렇지 않다면 기존 알고리즘을 참고해서 새 알고리즘을 테스트하고 디버깅한다.

 

 

 

기능 이동

8.1 함수 옮기기 

배경 : 좋은 소프트웨어 설계의 핵심은 모듈화가 얼마나 잘되어 있느냐를 뜩하는 모듈성이다.

모듈성이란, 프로그램의 어딘가를 수정하려 할때 해당 기능과 깊이 관련된 작은 일부만 이해해도 가능하게 해주는 능력이다.

언제 ? : 어떤 함수가 자신이 속한 모듈 A의 요소들보다 다른 모듈 B의 요소들을 더 많이 참조한다면.

(1) 이 함수를 최상위로 복사하면서 임시적인 이름 부여

(2) 의존 함수를 매개변수로 ? 같이 컨텍스트를 옮기기로 ? -> 현재 Context에 있는 함수 사용여부 판단 -> 함꼐 넘길지, 혼자 넘길지 판단

(3) 복사 한 소스에서 복사당한 소스 호출

(4) 테스트 통과 후 기존 소스 삭제

 

만약 소스 컨텍스트에서 가져와야 할 데이터가 많다면 자신 this를 통해 넘겼을 것이다.

-> 즉, 상황에 따라 다르다. 언제나 상황에 따라 리팩토링을 어떻게 할지 정하자.

8.2 필드 옮기기

8.3 문장을 함수로 옮기기

배경 : 중복 제거는 코드를 건강하게 관리하는 가장 효과적인 방법 중 하나다.

 

추상화라는 것은, 그 경계를 항상 올바르게 긋기가 만만치가 않다.