위 코드는 Laboratory 컴포넌트 코드로서 중첩 if-else 블록 두 개에 조건문을 넣어 Sample을 분석합니다.
코드는 불 반환값과 불 원시 타입(true와 false)을 명시적으로 비교합니다. 초보자 코드에서 종종 발견되는 안티 패턴(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; } } }