Refactoring

[ 리팩토링 by 마틴 파울러 ] Chapter10. 조건부 로직 간소화

noahkim_ 2021. 7. 22. 02:05

조건부 로직을 이해하기 쉽고 깔끔하게 만들어야 프로그램의 전체 코드가 복잡하지 않게된다.

 

10.1 조건문 분해하기

 

조건, 분기 모두 함수로 추출해버려 가독성 높이기

 

왜 이 코드가 실행되는 지 모를때가 많음

 

10.2 조건식 통합하기

 

비교하는 조건은 다르지만 그 결과로 수행하는 동작은 똑같은 코드들이 있다.
이럴 때 and나 or연산자를 사용하여 여러 개의 비교 로직을 하나로 합칠 수 있다.

 

간단한 여러 조건문을 하나의 복잡한 조건문으로 통합하기

 

부수효과에 유의하기

 

10.3 중첩 조건문을 보호 구문으로 바꾸기

 

보호 구문 : 한쪽만 정상이라면 비정상 조건을 if로 검사한 다음, 조건이 참이면 함수에서 빠져나온다.

 

if절과 else절에 똑같은 무게를 두어, 코드를 읽는 이에게 양 갈래가 똑같이 중요하다는 뜻을 전달함.

 

함수의 진입점과 반환점이 하나일 필요 없음

 

10.4 조건부 로직을 다형성으로 바꾸기

 

Switch 대신 오버라이드 된 subclass에 각자 다른 동작 구현

 

10.5 특이 케이스를 추가하기

 

‘미확인 고객’의 경우 특수 처리가 되어야 함 (이름,요금,납부이력 등이 ‘기본값’처리 되어야 함)

‘미확인 고객’의 정보를 참조하는 곳이 여러 곳에 분산 되어있음

 

UnknownCustomer라는 특이 케이스에서 처리함

‘기본값’을 갖는 literal object로 처리

변환함수에 통과시켜, 예외가 ‘기본값’을 갖도록 만듬

 

=> 조건문이 없어지고하나의 동작으로 해결

 

10.6 어서션 추가하기

 

가정이 코드에 항상 명시적으로 기술되어 있지 않아 알고리즘을 보고 연역해서 알아내야 할 때

 

동작에 critical 하지 않은 가정의 assertion 시스템을 실패 시키지 않도록 주의

 

10.7 제어 플래그를 탈출문으로 바꾸기

 

제어 플래그 : 코드의 동작을 변경하는데 사용되는 변수

 

break나 continue 사용하기