210224_B책_For 루프 대신 For-Each

정재현·2021년 2월 24일
0

TIL

목록 보기
76/80

오늘은 for 루프문 대신 for-each 을 사용하는 것을 배워본다.
사실 나는 for 루프문만 쓰고 each를 쓰는 것이 어색하다.

class LaunchChecklist {
 List<String> checks = Arrary.asList("Cabin Pressu", "Communication", "Engine");

Status prepareForTakeoff (Commander commander) {
 for (int i = 0; i < checks.size(); i++) {
    boolean shouldAbortTakeoff = commander.isFailing(checks.get(i));
    if (shouldAbortTakeoff) {
     return Status.ABORT_TAKE_OFF;
    }
   }
   return Status.READY_FOR_TAKE_OFF;
 }
}

위 코드에서는 checks라는 List 자료 구조를 순회합니다. for 루프를 사용하며 인덱스 변수인 i로 checks를 순회하는데, 매우 전통적인 순회방법이다.
하지만 위 조각을 보면 리스트 내 다음 원소에 접근할 때 아니면 인덱스를 쓰지 않는다.
그리고 인덱스 변수를 실수로 잘못넣어 (예를들면 9까지인데 10을 넣는다거나, < 인데 <= 를 넣는다거나 해서 IndexOutOfBoundsExceptions이 일어나는 것.)

그렇기 때문에 each문을 사용할 수 있는데,

class LaunchChecklist {
 List<String> checks = Arrary.asList("Cabin Pressu", "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;
 }
}

처음에는 어색할 수 있는 문법이지만 얼마나 편리한지 곧 깨닫게 된다.
읽으면 "checks 내 각 check에 대해 아래 코드를 수행해라." 이고,
예제에서는 check를 생성 후 활용하였다.
더이상 반복 인덱스를 사용하지 않아도 되고, 따라서 indexoutof도 보지 않는다.

변수명 명명 규칙은

for (타입 단수명 : 복수명)

이다.

그렇다면 인덱스로 순회하는 전통적인 방식은 언제 쓰는 것이 적절할까?
=> 정답은 "거의 없다" 라고 한다.
-> (충격;; 거의 매번 이렇게 썼는데;; 근데 정확히 몇번 돌린다. 라는 것에 대해선 써야 맞을듯싶다.)

이유는 대부분 자료 구조 내 각 원소만 처리하는게 간단하고 명료하니깐.

오늘의 코멘트: each문과 친해져야겠다고 느낀다..

profile
"돈받고 일하면 프로다"

0개의 댓글