[Java] iterator과 for-each의 차이

yongju·2024년 9월 1일
0

JAVA

목록 보기
6/8

정리

순회하여 데이터를 조건별로 수정 또는 삭제할 것이 있다면 iterator, 단순 데이터 조회 시에는 for-each를 사용하는 것이 가독성 측면에서 좋다.

Iterator

  • 자바 collection framework에 속해있는 인터페이스 중 하나.

  • itertor을 구현한 클래스는 collection객체를 탐색, 데이터 접근, 삭제 가능

  • 선언 및 사용 방법

List<Integer> list = new ArrayList<>();
list.add(1);
	...
Iterator<Integer> iter = list.Iterator();	// 리스트에 저장된 값을 iterator로 할당

while(iter.hasNext()) {
	iter.next(); // iterator에 저장된 값 꺼내오기
}
  • 단점
  1. 사용시, 매번 iterator 타입의 변수를 생성하고 초기화 해야함.
  2. iterator 객체를 이용하여 아이템 탐색하는 경우, 기본코드(boilerplate code)가 많아진다.
  • boilerplate code(보일러플레이트 코드) : 여러곳에서 재사용되며, 반복적으로 비슷한 형태를 띄는 코드
  • 순회 도중 수정 또는 삭제가 가능하다. remove()를 사용하여 요소를 지워도 에러 없이 순회 가능하다.

for-each

  • 자바 1.8 버전부터 사용 가능.
  • iterator의 단점을 극복.
  • 선언 및 사용 방법
List<Integer> list = new ArrayList<>();
list.add(1);
	...

while(int i : list) {
	i // list에 저장된 값 바로 사용 가능
}
  • 리스트의 처음부터 끝까지 탐색한다. (탐색 도중 예외가 발생할 때까지)
    따라서, 조건문을 사용하여 예외처리를 해야만 빠져나올 수 있다. eg) 1~6까지 정수를 담고 있는 ArrayList에서 for-each를 써서 1~3까지만 탐색할 수 없음.
  • 순회 도중 데이터 수정 또는 삭제 시, ConcurrentModificationException가 발생할 수 있다. 이미 선언된 어레이를 순회하던 중 어레이가 중간에 줄어드는 것임.
  • ConcurrentModificationException : 하나 이상의 스레드가 동시에 컬렉션을 수정하려고 할때 발생하는 예외.

차장님께서 회사 공통은 대부분 iterator을 쓰는데 왜 for-each로 반복문을 작성하냐고 하셨다

참고자료
[Iterator 와 For-each 비교] https://erinyees.tistory.com/21
[보일러플레이트 코드란?(Boilerplate code)] https://charlezz.medium.com/%EB%B3%B4%EC%9D%BC%EB%9F%AC%ED%94%8C%EB%A0%88%EC%9D%B4%ED%8A%B8-%EC%BD%94%EB%93%9C%EB%9E%80-boilerplate-code-83009a8d3297
[[Java] 자바에서 ConcurrentModificationException이 발생하는 이유와 해결방법 | Map.keySet()] https://jelong.tistory.com/entry/Java-%EC%9E%90%EB%B0%94%EC%97%90%EC%84%9C-ConcurrentModificationException%EC%9D%B4-%EB%B0%9C%EC%83%9D%ED%95%98%EB%8A%94-%EC%9D%B4%EC%9C%A0%EC%99%80-%ED%95%B4%EA%B2%B0-%EB%B0%A9%EB%B2%95-MapkeySet
[[Java] Iterator, Iterable, for-each 각각의 특징] https://soyeondev.tistory.com/60

profile
SI DEV

0개의 댓글