더북(TheBook)

하지만 위 조각을 보면 리스트 내 다음 원소에 접근할 때가 아니면 인덱스를 쓰지 않습니다. 그러니 인덱스를 계속 추적할 필요가 없죠.

게다가 인덱스 변수에는 실수할 여지가 있습니다. protected가 아니니 언제든지 덮어쓸 수 있습니다. 초보자는 종료 기준을 < 대신 <=로 바꾸어야 할지 무척 고민합니다. IndexOutOfBoundsExceptions이 일어나면 당황스럽거든요.

인덱스 변수가 제공하는 정보를 자세히 알아야 할 경우는 드뭅니다. 이럴 때는 루프를 다르게 즉 세부 순회 내용은 보호할 수 없지만 적어도 프로그래머에게는 숨기는 식으로 작성해야 합니다.

그렇게 하면 소프트웨어가 더 안전하고 이해하기 쉬워집니다!

다행히 자바는 이를 위한 몇 가지 문법을 제공합니다. 경험상 아래와 같은 문법을 이용하는 것이 가장 쉽습니다.

class LaunchChecklist {

    List<String> checks = Arrays.asList("Cabin Pressure", 
            "Communication", 
            "Engine");

    Status prepareForTakeoff(Commander commander) { 
        for (String check : checks) {
            boolean shouldAbortTakeoff = commander.isFailing(check); 
            if (shouldAbortTakeoff) {
                return Status.ABORT_TAKE_OFF; 
            }
        }
        return Status.READY_FOR_TAKE_OFF; 
    }
}
신간 소식 구독하기
뉴스레터에 가입하시고 이메일로 신간 소식을 받아 보세요.