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

    게다가 인덱스 변수에는 실수할 여지가 있습니다. 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; 
        }
    }
    신간 소식 구독하기
    뉴스레터에 가입하시고 이메일로 신간 소식을 받아 보세요.