더북(TheBook)

코드에 눈에 띄는 버그는 없습니다. 다만 조건과 명령문이 계속 연이어 나온다는 점이 문제죠. 이렇게 되면 모든 조건과 명령문을 한 번에 읽고 이해해야 합니다. 중첩이 별로 없는 작은 예제이므로 별로 어렵지 않습니다. 하지만 현실에서는 구조가 커질 수 있고 이해하기 매우 힘들어질 수 있습니다.

본질적인 문제는 코드 대칭성(code symmetry)의 부재입니다. 켄트 벡(Kent Beck)이 내린, 다음과 같은 정의를 한 번 봅시다.* “거의 같은 것들은 똑같은 부분과 완전히 다른 부분으로 나눌 수 있다.”

생각해보세요. 모든 분기가 비슷한 관심사를 표현하나요? 병렬 구조를 띠나요? 아니면 세 가지 분기 모두 정말 대칭인가요?

정답은 “그렇지 않다”입니다. 첫 번째 분기는 접근을 거절합니다. 두 번째와 세 번째 분기는 접근을 부여합니다. 대칭이 아니죠.

그러면 코드를 대칭적으로 바꾸면 어떤 모습일까요?

class BoardComputer {

    CruiseControl cruiseControl;

    void authorize(User user) {
        Objects.requireNonNull(user);
        if (user.isUnknown()) {
            cruiseControl.logUnauthorizedAccessAttempt();
            return;
        }

        if (user.isAstronaut()) {
            cruiseControl.grantAccess(user);
        } else if (user.isCommander()) {
            cruiseControl.grantAccess(user);
            cruiseControl.grantAdminAccess(user);
        }
    }
}

 

 


신간 소식 구독하기
뉴스레터에 가입하시고 이메일로 신간 소식을 받아 보세요.