Collection에 대해 공부하다 for문도 있고 foreach문도 있는데 무슨 차이로 동작하고 iterator와의 차이는 무엇인가 궁금하여 공부한 내용을 정리합니다.
1. Loop문의 특징
Loop의 반복문
Java에서 반복문을 사용할 때 for문을 사용하였습니다.
int[] arr1 = new int[]{1,2,3,4,5};
for (int index = 0; index < arr1.length; index++) {
System.out.println(arr1[index]); // 1 2 3 4 5
}
따라서 위와 같이 사용했는데, 더 다양하고 효율적으로 데이터를 관리할 수 있는 Collection이 나오면서 Collection사용을 지향하게 됐고
List<Integer> arr = new ArrayList<>(Arrays.asList(1,2,3,4,5));
for (int index = 0; index < arr.size(); index++) {
System.out.println(arr.get(index)); // 1 2 3 4 5
}
위와같이 사용하게 됐습니다.
Iterator
Java의 컬렉션 프레임워크를 구현한 List, Set, Map등에서 반복을 위해 사용되는 방법이고 값을 순차적으로 꺼내서 처리할 수 있다.
List<Integer> arr = new ArrayList<>(Arrays.asList(1,2,3,4,5));
for (Iterator<Integer> it = arr.iterator(); it.hasNext(); ) {
System.out.println(it.next()); // 1 2 3 4 5
}
따라서 아까와 같은 배열을 Collection의 iterator로 위와 같이 변경할 수 있습니다.
foreach
foreach문으로 for문의 반복을 간단히 작성하여 가독성이 높습니다.
List<Integer> arr = new ArrayList<>(Arrays.asList(1,2,3,4,5));
for(Integer data : arr) {
System.out.println(data); // 1 2 3 4 5
}
2. 비교
for문과 foreach문 전부 for문이므로 순차적으로 데이터를 탐색할 것이다. 하지만 foreach문은 내부적으로 iterator를 통해 동작한다는 특징이 있다. 따라서 foreach문과 iterator문은 기본적으로 동작 원리는 비슷하다 생각하면 된다.
성능 및 기능
for문
기본적인 반복문으로 일반 배열이나, Collection의 List에서 특정 횟수를 반복할 때 사용, Set과 Map의 경우 순서가 있는것이 아니므로 index 접근이 불가능하다.
foreach문
컬렉션에서 요소를 순차적으로 꺼내서 처리할 때 사용, 단 오직 읽기 용으로 사용한다.
iterator문
foreach문과 동일하게 순차적으로 꺼내서 처리하지만, 컬렉션의 요소를 제거하거나 추가가 가능하다.
가독성 및 사용
for문
코드가 이해하기는 쉽지만, iterator를 사용하지 않으므로 컬렉션 중 Set이나 Map에 대해서 접근이 불가능하다 따라서 특정 횟수를 반복할 때나 인덱스 접근에 많이 사용한다.
foreach문
for문보다 훨신 간단하고 코드의 이해가 편하다 또한 컬렉션에서 요소를 순차적으로 꺼내서 사용할 때 사용한다.
iterator문
for문이나 while문과 함께 사용하며 순차적으로 컬렉션 요소에 접근할 때와 컬렉션의 요소를 추가 제거할 때 사용하지만 코드가 복잡하다.
단, iterator를 사용하여 요소를 제거할 때 remove()를 사용하게 되는데, 이때 next()와 함께 사용하지 않는다면 데이터의 삭제를 정상적으로 하지 못한다.
'JAVA > 자바스터디' 카테고리의 다른 글
[자바스터디] Generic vs Object (0) | 2023.01.28 |
---|---|
[자바스터디] Generic (0) | 2023.01.28 |
[자바스터디] Collection - Collections (0) | 2023.01.22 |
[자바스터디] Collection - Iterator (0) | 2023.01.22 |
[자바스터디] Collection - List (0) | 2023.01.21 |