-
[리팩토링] 조건문 쪼개기 & 매개변수My-Book(History) 2015. 6. 13. 19:59반응형if를 피하고 싶다면 아래 참조
1. 중복 조건식 통합 : 여러 조건 검사식의 결과가 같을 땐 하나의 조건문으로 합친 후 메서드로 빼내자.
예제)double disablityAmount() {if (_seniority < 2) return 0;if (_monthsDisabled > 12) return 0;if (_isPartTime) return 0;}▼double disabilityAmount() {if (isNotEligableForDisability()) return 0;}bollean isNotEligableForDisability() {return ((_seniority <2) || (_monthsDisabled > 12) || (_isPartTime))}Tip : 조건식 검사식이 독립적이고 하나의 검사로 인식되지 말아야 할 땐 이 리펙토링 기법을 실시하면 안된다.
2. 조건문의 공통 실행 코드 뺴내기 : 조건문의 모든 절에 같은 실행 코드가 있을 땐 같은 부분을 조건문 밖으로 뺴자.
예제)
if (true) {
total = price * 0.95;
send();
} else {
total = price * 0.98;
send();
}
▼
if (true) {
total = price * 0.95;
} else {
total = price * 0.95;
}
send();
Tip : 1) 조건에 상관없이 공통적으로 실행되는 코드를 찾자. 2) 공통 코드가 조건문의 앞 절에 있을땐
조건문 앞으로 빼자. 3) 공통 코드가 조건문의 끝 절에 있을땐 조건문 뒤로 빼자.
4) 공통 코드 명령이 둘 이상일땐 메서드로 만들자.
4. 매개변수를 메서드로 전환 : 매개변수로 전달된 값에 따라 메서드가 다른 코드를 실행할 땐 그 매개변수로 전달될 수 있는 모든 값에 대응하는 메서드를 각각 만들어라
ex)void setValue (String name, int value) {if (name.equals("height")) {_height = value;return;}if (name.equals("width")) {_width = value;return;}}
▼
void setHeight(int arg) {
_height = arg;
}
void setWidth (int arg) {
_width = arg;
}
이 리팩토링 기법은 일반적으로 한 매개변수의 값이 여러 개가 될 수 있을 때 조건문 안에서 가 값을 검사하여 다른 기능을 수행하는 메서드에 적용하게 된다.
호출하는 부분은 매개변수에 값을 지정하여 무엇을 수행할지 판단해야 하므로,
여러 메서드를 작성하고 조건문은 없애는 것이 좋다. 그러면 조건에 따른 실행도 방지하면서
컴파일할 때 검사가 된다는 장점이 있다.
반응형'My-Book(History)' 카테고리의 다른 글
[Effective Java 2/E] 규칙2 생성자 인자가 많을 때는 Builder 패턴 적용을 고려하라 (0) 2016.02.20 [리팩토링] 메소드 인수를 조절한다. (0) 2015.06.27 [리팩토링] 메서드 추출 (0) 2015.06.07 JavaScript Patterns (DOM과 브라우저 패턴) (0) 2015.05.04 JavaScript Patterns ( 체이닝 패턴 & 싱글톤 패턴 & 반복자_iterator 패턴) (0) 2015.05.02