조건부 로직을 이해하기 쉽고 깔끔하게 만들어야 프로그램의 전체 코드가 복잡하지 않게된다.
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 사용하기
'Code' 카테고리의 다른 글
[ 리팩토링 by 마틴 파울러 ] Chapter12. 상속 다루기 (0) | 2021.07.22 |
---|---|
[ 리팩토링 by 마틴 파울러 ] Chapter11. API 리팩토링 (0) | 2021.07.22 |
[ 리팩토링 by 마틴 파울러 ] Chapter09. 데이터 조직화 (0) | 2021.07.22 |
[ 리팩토링 by 마틴 파울러 ] Chapter08. 기능 이동 (0) | 2021.07.22 |
[ 리팩토링 by 마틴 파울러 ] Chapter07. 캡슐화 (0) | 2021.07.21 |