여러 조건문을 하나로 합쳐 확인해야 한다면 다른 식으로 묶는 것이 낫습니다. 훌륭한 그루핑이란 조건의 의미에 따라 좌우되니 주제나 추상화 정도에 따라 그루핑하세요.

    한 메서드 안에서는 추상화 수준이 비슷하도록 명령문을 합쳐야 합니다. 더 높은 수준의 메서드가 다음으로 낮은 수준의 메서드를 호출하는 것이 이상적이죠.

    유용한 괄호

    불 조건은 특히 괄호가 없으면 다루기 까다롭습니다. 많은 개발자(그리고 우리 스스로)는 불 연산자 우선순위를 따로 기억하지 못하며 x && y || z(x && y) || z인지 x && (y || z)인지 알려면 잠시 생각해야 하죠. &&가 항상 ||보다 먼저 평가된다는 사실, 알고 있었나요?

    예제의 willCrewSurvive() 메서드는 한 조건문 안에서 낮은 수준의 각 세부 내용을 확인합니다. 상호 추상화 정도가 어떤가요? 아래처럼 코드를 바꾸면 어떨까요?

    class SpaceShip {
    
        Crew crew;
        FuelTank fuelTank;
        Hull hull;
        Navigator navigator;
        OxygenTank oxygenTank;
    
        boolean willCrewSurvive() {
            boolean hasEnoughResources = hasEnoughFuel() && hasEnoughOxygen();
            return hull.isIntact() && hasEnoughResources;
        }
    
        private boolean hasEnoughOxygen() {
            return oxygenTank.lastsFor(crew.size) > navigator.timeToEarth();
        }
    
        private boolean hasEnoughFuel() {
            return fuelTank.fuel >= navigator.requiredFuelToEarth();
        }
    }
    신간 소식 구독하기
    뉴스레터에 가입하시고 이메일로 신간 소식을 받아 보세요.