1. 질의 함수와 변경함수 분리하기
질의 함수란 7.4에서 처음 나왔는데, 값을 계산하여 리턴시키는 함수다.
'겉보기 부수효과'가 없는 반환 함수를 추구해야한다.
겉보기 부수효과란? 입출력 변경이나, 데이터 값이 변형되는 경우를 말한다.
* 명령-질의 분리 (질의함수는 모두 부수효과가 없어야 한다.)
https://martinfowler.com/bliki/CommandQuerySeparation.html
2. 함수 매개변수화하기
함수의 로직이 비슷한 경우, 매개변수 값만 바꿔서 여러 곳에 적용하도록 하자. 그러면 함수의 유용성이 커진다.
범위를 다루는 함수는 중간 대역부터 리팩터링을 시작하고, 대역의 상한를 쓸 때는 Infinity를 이용하자.
3. 플래그 인수 제거하기
불리언 플래그는 코드를 읽을 때 뜻을 정확히 전달하지 못하기 때문에, 명시적인 함수를 만들어서 제공하는 것이 좋다. true 값 하나만 가지고는 의미를 파악하기 힘들다. 플래그 인수가 두 개 이상이면 꼭 리팩터링하도록 하자.
이처럼 불리언 플래그를 써서 호출할 때
function bookConcert(aCustomer, isPremium){
if(isPremium){ ... }
}
의미를 알 수 없는 true 값을 만나게 된다.
bookConcert(aCustomer, true);
명시적인 함수를 사용하면 깔끔해진다.
premiumBookConcert(aCustomer);
4. 객체 통째로 넘기기
매개변수를 두어 개 넘기는 것보다 레코드를 통째로 넘기고 함수 본문에서 필요한 값을 꺼내는 편이 좋다.
5. 매개변수를 질의 함수로 바꾸기 (↔️ 질의 함수를 매개변수로 바꾸기)
매개변수는 함수의 변동 요인이다. 중복은 피하고 짧을수록 좋다.
다만, 참조 투명을 지키도록 하자. 함수에 똑같은 값을 건네 호출하면 항상 똑같이 동작해야 한다.
6. 질의 함수를 매개변수로 바꾸기 (↔️ 매개변수를 질의 함수로 바꾸기)
5번 기법과는 반대로, 전역변수를 참조하거나 의존 관계를 바꾸고 싶을 때 해당 기법을 사용한다.
호출자가 복잡해지는 단점이 있다.
7. 세터 제거하기
세터 제거하기가 필요한 두 가지 상황이 있다.
1) 무조건 접근자 메서드를 통해서만 필드를 다루려고 할 때.
2) 클라이언트에서 생성자를 사용해 객체를 생성할 때.
'Today I Learned' 카테고리의 다른 글
리팩터링 2판 챕터12 - 상속 다루기 (0) | 2021.12.29 |
---|---|
리팩터링 2판 챕터11 - API 리팩터링(2) (0) | 2021.12.23 |
리팩터링 2판 챕터10 - 조건부 로직 간소화(2) (0) | 2021.12.20 |
리팩터링 2판 챕터10 - 조건부 로직 간소화(1) (0) | 2021.12.16 |
리팩터링 2판 챕터9 - 데이터 조직화 (0) | 2021.12.12 |