마지막 질문에 대한 답변이다.
항상 문제를 풀면서 사실 Iterator가 뭔지 모르고..어떻게 사용해야 할지 감이 잘 안잡혔었는데...🤔
이번 기회를 통해 공부할 수 있어서 너무 좋다!
🔵 Iterator의 사용 목적은 무엇인가요? 어떤 특징이 있죠?
💬
Iterator는 Collection 요소를 반복적으로 순회하기 위해 사용됩니다. List, Map, Set 등 의 데이터 구조에서 요소를 하나씩 순차적으로 접근하고 처리할 수 있게 해줍니다.
Iterator는 내부적으로 컬렉션의 상태를 관리하고, 다른 스레드의 변경 작업이 일어나더라도 안정적으로 요소를 반복합니다. 이를 통해 여러 스레드가 동시에 컬렉션의 요소에 접근할 때 충돌이나 데이터 불일치 문제를 방지할 수 있습니다.
Iterator는 한 번만 순회할 수 있는 일회성 개체로 순회를 마치면 새로운 Iterator의 생성이 필요합니다.
Iterator는 hasNext(), next(), remove() 와 같은 메서드를 제공하며 이를 통해 다음 요소를 검색하고 반환 요소를 삭제할 수도 있습니다.
for 와 비교하여 Iterator를 사용하는 경우는 Collection 요소를 반복 순회할 때 입니다. Iterator를 사용하면 요소의 순회 방식 제어 가 가능하며 삭제 시에는 요소를 반복하며 안전하게 삭제할 수 있다는 장점이 있습니다. Iterator를 사용함으로써 보다 유연하고 안전한 요소 순회를 구현하며, 코드의 가독성과 유지 보수성을 향상시킬 수도 있습니다.
🔵 Iterator의 특징
✅ 데이터 접근 및 처리
Iterator는 컬렉션 내의 요소에 순차적으로 접근하고 처리
✅ 메모리 효율성
필요한 만큼의 데이터만 로드하여 처리하므로 대량의 데이터를 다룰 때 메모리 사용량 최적화
Iterator를 사용하면 컬렉션의 모든 요소를 한 번에 메모리에 로드하지 않고 필요한 요소만 메모리에 유지하여 처리
내부적으로 현재 가리키고 있는 요소에 대한 참조만을 유지하고, 다음 요소로 이동하기 위해 next() 메서드를 호출할 때마다 값을 생성
✅ 동시성 지원
동기화 문제를 해결하기 위해 Java의 Iterator는 thread-safe 하게 구현되어 있다.
따라서, Iterator를 사용하면 여러 스레드가 동시에 컬렉션의 요소에 접근할 때 충돌이나 데이터 불일치 문제를 방지할 수 있다.
Iterator는 내부적으로 컬렉션의 상태를 관리하고, 다른 스레드의 변경 작업이 일어나더라도 안정적으로 요소를 반복한다.
🔵 Iterator 메서드
Type | Method | 설명 |
default void | forEachRemaining(Consumer<? super E> action) | 모든 요소가 처리되거나 작업이 예외를 throw할 때까지 나머지 각 요소에 대해 지정된 작업을 수행 |
boolean |
hasNext() | 읽어 올 요소가 있는지 반복 확인 next() 요소가 있으면 true, 없으면 false 반환 |
E | next() | 반복에서 다음 요소 반환 |
default void | remove() | 반복자가 반환한 마지막 요소를 제거 호출당 한 번만 호출 |
✅next()
import java.util.ArrayList;
import java.util.Iterator;
public class IteratorExample {
public static void main(String[] args) {
// 컬렉션 만들기
ArrayList<String> array = new ArrayList<String>();
array.add("First");
array.add("Second");
array.add("Third");
array.add("Fourth");
// 이터레이터 생성
Iterator<String> it = array.iterator();
// 출력
System.out.println(it.next());
}
}
출력결과 : First
✅ hasNext()
import java.util.ArrayList;
import java.util.Iterator;
public class IteratorExample {
public static void main(String[] args) {
// 컬렉션 만들기
ArrayList<String> array = new ArrayList<String>();
array.add("First");
array.add("Second");
array.add("Third");
array.add("Fourth");
// 이터레이터 생성
Iterator<String> it = array.iterator();
// 출력
while(it.hasNext()) {
System.out.println(it.next());
}
}
}
출력결과
✅ remove()
import java.util.ArrayList;
import java.util.Iterator;
public class IteratorExample {
public static void main(String[] args) {
// 컬렉션 만들기
ArrayList<String> array = new ArrayList<String>();
array.add("First");
array.add("Second");
array.add("Third");
array.add("Fourth");
// 이터레이터 생성
Iterator<String> it = array.iterator();
// 출력
while(it.hasNext()) {
String s = it.next();
if(s == "First") {
it.remove();
}
}
System.out.println(array);
}
}
출력결과
🔻 참고 자료
🔗 Java의 Iterator, ListIterator 및 Iterable 설명
https://10kloc.wordpress.com/2012/12/15/iterators-in-java-listiterator-iterable-as-well/
🔗 iterator vs for
https://stackoverflow.com/questions/22267919/iterator-vs-for
🔗자바 iterator w3schools
https://www.w3schools.com/java/java_iterator.asp
🔗baeIdung 예제
https://www.baeldung.com/java-iterator
🔗Iterator Oracle 공식 문서
https://docs.oracle.com/en/java/javase/14/docs/api/java.base/java/util/Iterator.html
이렇게 간단한 예제들을 만들어 보고 실행해보면 진짜 별 거 아닌 것 같은데 또,, 코테 문제 풀어보면 넘넘 어려븐 것이다..🥹
동시성 지원에 동기화라는 것이 이해가 잘 안되어서 더 자세히 찾아봐야 할 듯 하다...
나름 쉽게 작성하느라 동기화라는 말은 빼고 내가 이해한대로 작성했는데 ㅎㅎ
더 공부해야할 듯 하다.... !
'LANGUAGE > JAVA' 카테고리의 다른 글
[JAVA] 가비지 컬렉션(Garbage Collection)의 역할 및 동작방법 (0) | 2023.10.09 |
---|---|
[JAVA] 체크 예외(Checked Exception) 언체크 예외(Unchecked Exception)의 차이 (0) | 2023.08.08 |
[JAVA] Array, ArrayList, LinkedList 비교하기 / 차이점 (2) | 2023.06.26 |
[JAVA] 자바 컨테이너(컬렉션 프레임워크 / Collection Framework)란? (0) | 2023.06.25 |
[JAVA] 데이터 타입 / String 기본 메서드 및 데이터 타입 알아보기 (0) | 2023.06.18 |