for, forEach의 차이

for, forEach의 차이

생성일
Oct 26, 2024 02:28 PM
최종 편집 일시
Last updated October 26, 2024
태그
JAVA

1. for 루프

for 루프는 인덱스를 사용해 배열이나 리스트의 요소에 접근한다.
따라서 for 루프는 순차적 인덱싱을 지원해 리스트나 배열의 요소에 대한 직접 접근이 가능하기 때문에 특정 구간의 요소만을 순회할 때 유용하게 사용가능하다.
다만 인덱스를 사용하기 때문에 OutOfRange 에러가 발생할 수 있고 LinkedList 순회 시 매우 느리다.

2. forEach 루프

forEach는 내부적으로 Iterator를 사용해서 컬렉션을 순회한다.
컬렉션 인터페이스에 정의된 iterator() 메서드를 호출해 Iterator 객체를 생성한 후, hasNext(), next() 메서드를 이용해서 각 요소에 접근한다.
인덱스를 직접 제어할 수 없기 때문에 중간에 특정 조건으로 순회를 건너뛰거나 역순으로 순회하는 작업이 어렵다.
Iterator를 사용하기 때문에 for문에 비해 추가적인 오버헤드가 발생할 수 있다.
forEach는 Iterable 인터페이스를 상속받아 사용하기 때문에 람다로 다루는 함수형 프로그래밍이 가능하다는 점에서 차이가 있다.
 

주의사항

forEach 사용시 함수형이기 때문에 non-final 변수를 사용할 수 없다.
이럴 때 사용하는 것이 atomicType이다.
향상 for 문에서는 break 등을 이용해서 흐름 제어가 가능하지만 forEach()에서는 불가능하다. 따라서 중간에 순회를 종료해야 하는 경우 불편하다.