본문 바로가기

IF문

[Refactoring] Null 검사를 Null 객체에 위임 하자 이 방법은 Null 검사를 자주 하게 될 때 유용한다. if (object == null)result = 0;else result object.getResult(); 위와 같은 코드를 Null객체를 구현함으로써 한줄로 표현된다. 슈퍼 클래스class Object {abstract int getResult();} Null 클래스class NullObject extends Object { int getResult() {return 0;}} 객체 생성시 Null 일 경우 NullObject로 만들어준다 그렇게 되면 위의 예제 코드는 다음과 같이 바꿀수 있다. result = object.getResult(); 위의 예제 말고도 set을 하는 함수에도 활용 할 수 있다. 이 방법은 Null이라는 예외도 클래스로.. 더보기
[Refactoring] 조건문을 재정의로 전환 객체 타입에 따라 다른 기능을 실행하는 조건문이 있을 땐 조건문의 각 절을 하위클래스의 재정의 메소드 안으로 옮기고 원본 abstract 타입으로 수정하자. switch (type) {case type1 :return 1;case type2 :return 2; } 위와 같이 되어진 구문의 경우 상황에 따라 다를 수 있지만 다형성을 이용하면 좋을 것 같다. 디자인 패턴에서 Strategy 패턴 처럼.. 추상 클래스abstract class type {abstract int result();} 구현 클래스class type1 extends type {int result () {return 1;}} class type2 extends type {int result () {return 2;}} 이와 같이 클래스.. 더보기
[Refactoring] 여러 겹의 조건문을 감시절로 전환 조건식은 주로 두 가지 형태를 띤다. 첫째는 어느 한 경로가 정상인지를 검사하는 형태 둘째는 조건식 판별의 한 결과만 정상작동 나머지는 비정상작동이 되는 형태이다. 정상동작이 일부라고 한다면 if절과 else절로 구성된 조건문을 사용하고 조건이 특이한 조건이라면 그 조건을 검사해서 조건이 true 일때 반환하자 이런 식의 검사를 감시절 guard clause 이라고 한다. if (i_isDead) {result = deadAmount(); } else { if (_isSeparated) {result = separatedAmount();} else {if (isRetired) {result = retiredAmount();} else {result = normalPayAmount();}}} 위와 같이 i.. 더보기
[Refactoring] 제어 플래그 제거 여러가지 조건문이 사용된 코드에는 조건문을 빠져나가는 시점을 결정하는 제어 플래그가 흔히 사용이 된다. 하지만 이탈점을 하나만 사용하면 코드 안의 각종 특이한 플래그로 인해 조건문이 복잡해진다. 이러한 복잡한 조건문을 방지하는 break, continue문이 있다. for (int i=0;i 더보기
[Refactoring] 조건문의 공통 실행 코드 빼내기 조건문의 모든 절에 실행 코드가 있을땐 같은 부분을 빼내자~! if (isSpecialDeal()) {total = price * 0.95;send();} else {total = price * 0.98;send();} 위와 같이 되어있는 조건문을 리팩토링을 하면.. if (isSpecialDeal()) {total = price * 0.95;} else {total = price * 0.98;}send(); 이렇게 하자~! 더보기
[Refactoring] 중복 조건식 통합 여러 조건의 검사식의 결과가 같을 땐 합치자~! double disabilityAmount () {if (_seniority 12) return 0;if (_isPartTime) return 0;.........} 위와 같은 조건식을 만들었을때.. 조건을 묶어서 함수로 만들어 보기 좋게하자~! double disabilityAmount () {if (isNotEligableForDisability()) return 0;........} 함수 내용은 귀찮아서.... 더보기
[Refactoring] 조건문 쪼개기 조건문 쪼개기 예시if (date.before(SUMMER_START) || date.after(SUMMER_END))charge = quantity * _winterRate + _winterServiceCharge;elsecharge = quantity * _summerRate; 위의 조건문을 보기 쉽게 리팩토링을 하면 if (notSummer(date))charge = winterCharge(quantity);elsecharge = summerCharge(quantity); 이 처럼 메소드로 바꾸어 보기 쉽게 만든다. 더보기