코드 자체는 별로 복잡하지 않습니다. 깊은 중첩도, 조건 분기도 없고 심지어 변수명이나 메서드명도 의미를 지닙니다. 그런데도 읽기 어렵습니다. 더하기와 따옴표, 공백이 많아 실제로 어떻게 처리되는지 혼란스럽죠(일반적으로 인간은 기호의 조합보다 자연어 속 단어를 이해하는 데 더 능합니다). 그래서 코드는 읽기 어려워졌고 작성할 때 실수할 가능성도 커졌습니다.

    게다가 int 값을 합치는 인라인 계산 실행도 혼란을 가중시킵니다. + 연산자는 Stringint일 때 시맨틱이 서로 다르니까요. 하나의 행에서 + 연산자를 서로 다른 시맨틱으로 사용하면 전체적으로 무엇을 하는 코드인지 알기 더 어렵습니다. 그렇게 하면 안 됩니다!

    코드를 대폭 간소화할 수 있습니다. 아래 코드를 보세요.

    class Mission {
    
        Logbook logbook;
        LocalDate start;
    
        void update(String author, String message) {
            final LocalDate today = LocalDate.now();
            String entry = String.format("%S: [%tm-%<te-%<tY](Day %d)> %s%n", 
                     author, today, 
                     ChronoUnit.DAYS.between(start, today) + 1, message);
            logbook.write(entry);
        }
    }
    신간 소식 구독하기
    뉴스레터에 가입하시고 이메일로 신간 소식을 받아 보세요.