더북(TheBook)

프로그래머는 binarySearch를 쓰기로 결정했지만 이 방법에 라고 대답함으로써 다른 많은 방법에 아니오라고 대답한 셈입니다. 주석이 이 선택의 근거를 정말 타당하게 설명하고 있나요? 코드에서 알고 싶은 것을 생각해보세요. 그리고 주석이 뭐라고 답해야 했을지도요.

알고 싶은 것은 이러한 것들입니다. 왜 빠른가요? 코드는 왜 빨라야 하나요? binarySearch 메서드가 정말 빠른가요? 이 빠른 해법의 비용이나 트레이드 오프(trade off)는 무엇인가요?

그런데 주석이 설명하는 것은 무엇인가요? 음, 딱 보아도 이 질문들에 대한 답은 없네요. 그러면 어떻게 향상시킬 수 있을까요?

새로 확장한 주석을 봅시다.

class Inventory {
    // 리스트를 정렬된 채로 유지한다. isInStock()을 참고한다.

    private List<Supply> list = new ArrayList<>();
    void add(Supply supply) { 
        list.add(supply); 
        Collections.sort(list);
    }

    boolean isInStock(String name) {
        /*
         * 재고가 남았는지 재고명으로 확인해야 한다면,
         * 재고가 천 개 이상일 때 심각한 성능 이슈에 직면한다.
         * 1초 안에 항목을 추출하기 위해
         * 비록 재고를 정렬된 채로 유지해야 하지만
         * 이진 검색 알고리즘을 쓰기로 결정했다.
         */
        return Collections.binarySearch(list, new Supply(name)) != -1;
    }
}
신간 소식 구독하기
뉴스레터에 가입하시고 이메일로 신간 소식을 받아 보세요.