컴퓨터/이론 및 tools 사용

[리팩토링 refactoring] Simplifying Conditional Expressions 조건문의 간결화 - Consolidate Duplicate Conditional fragments 조건문의 공통 실행 코드 빼내기

review777777 2016. 11. 24. 03:10
반응형


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를 사용

논리문 밖으로 나오도록 하는 컨트롤 플래그의 값을 찾는다.

논리문 밖으로 나오도록, 컨트롤 플래그에 값을 설정하던 부분을 찾아 breakcontinue 문으로 바꾼다.

컴파일 및 테스트

* breakcontinue를 사용하지 않는 다른 접근 방법

로직을 메소드로 뽑아낸다.

논리문 밖으로 나오도록 하는 컨트롤 플래그의 값을 찾는다.

논리문 밖으로 나오도록 컨트롤 플래그에 값을 설정하던 부분을 return으로 바꾼다.

컴파일 및 테스트

 

Benefits

제어 플래그 코드는 종종 제어 흐름 operators로 쓰인 코드보다 더 다루기 힘들다.


반응형