-
Notifications
You must be signed in to change notification settings - Fork 0
Open
Labels
Description
전통적인 for 문보다는 for-each 문을 사용하라
전통적인 for 문
for (Iterator<Element> i = c.iterator(); i.hasNext(); ) {
Element e = i.next();
}
for (int i = 0; i < a.length; i++) {
}
이 방식은 while문 보다는 낫지만 #31 좋은 방법은 아니다. 우리는 협업을 해야하기 때문에 가독성이 좋은 코드를 작성해야한다. 하지만 전통적인 방식의 for 문은 가독성을 다소 저하시킨다. 반복자와, 인덱스 변수는 코드를 지저분하게 하며 우리가 꼭 필요한 부분이 아니다.
이 문제는 for-each문으로 해결이 가능하다. for-each 문은 익히 들어본 향상된 for문과 같다.
- 반복자와 인덱스 변수를 사용하지 않아 코드가 깔끔해지고 오류가 발생할 우려가 없다.
for (Element e : elements) {
}
이 반복문은 elements 안의 각 원소 e에 대해 라고 읽으며 반복 대상이 컬렉션이든 배열이든, for-each문을 사용해도 속도는 그대로다.
컬렉션을 중첩해 순회해야 한다면 for-each 문의 이점이 더욱 커진다.
for (Suit suit : suits)
for (Rank rank : ranks)
deck.add(new Card(suit, rank));
for-each문을 사용할 수 없는 케이스
- 파괴적인 필터링 ( destructive filtering ) - 컬렉션을 순회하면서 선택된 원소를 제거 해야할 때 반복자의 remove 메서드를 호출 해야한다. ( 자바 8부터는 Collection의 removeIf 메서드를 사용해 컬렉션을 명시적으로 순회하는 일을 피할 수 있다.)
- 변형 (transforming) - 리스트나 배열을 순회하면서 그 원소값 일부 혹은 전체를 변경해야할 때
- 병렬 반복 (parallel iteration) - 여러 컬렉션을 병렬로 순회해야 한다면 인덱스 변수를 사용해야함.
정리
전통적인 for 문과 비교했을 때 for-each 문은 명료하고, 유연하고, 버그를 예방해준다. 따라서 가능한 모든 곳에서 for 문보다는 for-each 문을 사용하자