1.2 부정 피하기
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; } } }
“긍정적으로 생각하라”라는 말을 들어본 적 있나요? 코드에서는 긍정 표현식이 부정 표현식보다 더 낫습니다. 대부분 이해하기 더 쉽고 공간도 조금 덜 차지하니까요.
위 코드는 Laboratory 컴포넌트를 다르게 변형한 것입니다. 메서드 두 개에서 Sample을 받아 Result를 반환합니다. 코드 내에 명백히 틀렸다고 말할 부분은 없습니다. 다만 목적에는 부합하지만 필요 이상으로 복잡합니다.
if 조건문을 봅시다. 둘 다 부정 조건을 표현합니다. 첫 번째 조건문은 샘플이 isInorganic()인지 테스트합니다. 두 번째 조건문은 심지어 불 연산자를 사용해 부정, 즉 느낌표인 "!"로 테스트하죠.