▪Consolidate Duplicate Conditional fragments 조건문의 공통 실행 코드 빼내기
Problem
동일한 코드 조각이 조건문의 모든 분기 안에 있는 경우
if (isSpecialDeal()) { total = price * 0.95; send(); } else { total = price * 0.98; send(); } |
Solution
if (isSpecialDeal()) { total = price * 0.95; } else { total = price * 0.98; } send(); |
동일한 코드를 조건문 밖으로 옮겨라.
절차
조건에 상관 없이 동일하게 실행되는 코드 확인.
공통으로 사용되는 코드가 시작 부분에 있다면, 그 코드를 조건문 앞으로 옮긴다.
공통으로 사용되는 코드가 끝 부분에 있다면, 그 코드를 조건문 뒤로 옮긴다.
공통으로 사용되는 코드가 중간 부분에 있다면, 그 코드의 앞 또는 뒤에 있는 코드와 위치를 바꿀 수 있는지를 살펴본다. 만약 가능하다면, 공통으로 사용하는 코드를 앞쪽이나 뒤쪽으로 옮긴다.
Benefits
코드 중복 제거
▪Remove Control Flag 제어 플래그 제거
Problem & Solution
일련의 boolean식에서 컨트롤 플래그 역할을하는 변수가 있는 경우, break 또는 return을 대신 사용하라.
절차
* break 또는 continue를 사용
논리문 밖으로 나오도록 하는 컨트롤 플래그의 값을 찾는다.
논리문 밖으로 나오도록, 컨트롤 플래그에 값을 설정하던 부분을 찾아 break나 continue 문으로 바꾼다.
컴파일 및 테스트
* break나 continue를 사용하지 않는 다른 접근 방법
로직을 메소드로 뽑아낸다.
논리문 밖으로 나오도록 하는 컨트롤 플래그의 값을 찾는다.
논리문 밖으로 나오도록 컨트롤 플래그에 값을 설정하던 부분을 return으로 바꾼다.
컴파일 및 테스트
Benefits
제어 플래그 코드는 종종 제어 흐름 operators로 쓰인 코드보다 더 다루기 힘들다.