더북(TheBook)

위 코드는 Laboratory 컴포넌트 코드로서 중첩 if-else 블록 두 개에 조건문을 넣어 Sample을 분석합니다.

코드는 불 반환값과 불 원시 타입(truefalse)을 명시적으로 비교합니다. 초보자 코드에서 종종 발견되는 안티 패턴(anti-pattern)이죠.

불이 아닌 다른 데이터 타입, 예를 들어 정수로 논리 조건문을 만들 때는 실제 값(예 myNumber == 25, input > 0)과 비교해야 합니다. 하지만 불 변수나 반환 타입은 그럴 필요가 없습니다.

예제에서는 불 표현식을 다루었습니다. 불 표현식은 불 원시값과 비교하지 않아도 됩니다. 비교는 코드를 어수선하게 만들 뿐만 아니라 읽기도 매우 어렵게 만듭니다.

이처럼 불필요한 비교는 대부분 간단히 제거할 수 있습니다. 코드가 줄어들 뿐만 아니라 읽기도 쉬워지죠.

이제 위 코드가 비교 없이 얼마나 간단해졌는지 확인해 봅시다.

class Laboratory {

    Microscope microscope;

    Result analyze(Sample sample) {
        if (microscope.isInorganic(sample)) {
            return Result.INORGANIC;
        } else {
            return analyzeOrganic(sample);
        }
    }

    private Result analyzeOrganic(Sample sample) {
        if (!microscope.isHumanoid(sample)) {
            return Result.ALIEN;
        } else {
            return Result.HUMANOID;
        }
    }
}
신간 소식 구독하기
뉴스레터에 가입하시고 이메일로 신간 소식을 받아 보세요.