불 표현식 간소화

A Kind Dev·2023년 2월 15일
0

자바 코딩의 기술

목록 보기
6/7
post-thumbnail

지난 글에서 [불 표현식을 직접 반환] 하는 방법을 적용하여 반환문을 하나로 압축하였다. 그러나 하나의 반환문에 여러 조건문을 합쳐 조건문이 이전보다 복잡해지게 되었다. 복잡해진 조건문을 어떻게 간소화할 수 있을까?


잘못된 코드

boolean willCrewSurvive() {
	return hull.holes == 0 &&
    	fuelTank.fuel >= navigator.requiredFuelToEarth() &&
        oxygenTank.lastsFor(crew.size) > navigator.timeToEarth();
}

위 코드는 조건문이 너무 길어 이해하기가 어렵다. 길이가 길다 보니 일부를 변경해야 할 때 실수가 발생하기 쉽고, 조건문의 의미를 이해하는 데에 비용(시간)이 발생한다.


올바른 코드

boolean willCrewSurvive() {
	boolean hasEnoughResources = hasEnoughFuel() && hasEnoughOxygen();
    return hull.isIntact() && hasEnoughResources;
}

private boolean hasEnoughFuel() {
	return fuelTank.fuel >= navigator.requiredFuelToEarth();
}

private boolean hasEnoughOxygen() {
	return oxygenTank.lastsFor(crew.size) > navigator.timeToEarth();
}

여러 조건문을 하나로 합쳐 확인해야 할 경우 조건의 의미에 따라 그룹핑하는 것이 좋다.
한 메서드 안에서는 추상화 수준이 비슷하도록 명령문을 합쳐야 한다. 더 높은 수준의 메서드가 다음으로 낮은 수준의 메서드를 호출하도록 한다.
위의 코드는 코드 행은 늘었지만 코드 이해도는 훨씬 향상되었다. 커다란 조건문을 한 번에 이해할 필요없이 의미 단계별로 이해가 가능하다. 또한 변수명과 메서드명으로 원하는 결과를 표현하는 것이 가능하다.


출처 : [자바 코딩의 기술], 사이먼 하러 외 3인, 길벗 출판사

profile
친절한 개발자

0개의 댓글