Iterator 정리
오늘은 자바에서 컬렉션 프레임 워크에 저장된 요소를 읽어오는 방법 중 자주 쓰이는 Iterator 인터페이스에 대해 정리해 보겠습니다.
우선 Iterator 인터페이스 내부를 한 번 들여다 보겠습니다.
- hasNext
- next
- remove
- forEachRemaining
위 4개의 함수가 있네요.
설명을 보면
hasNext는 iteration에 다음 요소가 존재하는지의 여부를 boolean으로 반환하고
next는 해당 iterator에서 다음 요소를 반환합니다.
remove는 iteration에서 반환된 마지막 요소를 내부 컬렉션에서 제고하는 역할을 합니다. next()호출마다 한번만 호출 가능하며, 반복이 진행되는 동안 이것 이외의 방법으로 컬렉션이 수정되면 동작이 지정되지 않는다고 설명하고 있습니다.
forEachRemaining은 모든 요소가 처리되거나 적업에서 예외가 발생할 때까지 남은 각 요소에 대해 지정된 작업을 수행합니다.
컬렉션에 저장된 요소를 읽어올때 Iterator 인터페이스를 사용할 수 있는데 이는 Collection 인터페이스에 Iterator 인터페이스를 구현한 클래스의 인스턴스를 반환하는 iterator()메소드를 정의해 두었기 때문입니다.
따라서 Collection인터페이스를 확장하는 List나 Set과 같은 인터페이스를 구현한 구현체에서 Iterator를 사용할 수 있는 것입니다.
for문 vs Iterator
사실 이것 때문에 이 글을 작성했다,,
iterator의 장. 단점을 우선 정리해보면
컬렉션 종류에 관계없이 일관성있게 프로그래밍이 가능하기 때문에 "소스코드에 어떤 컬렉션을 사용할지 정해지지 않았지만 컬렉션 내에 보관한 모든 내용을 출력해라" 같은 작업을 하길 원한다면 iterator를 사용이 장점이고
단점은 iterator 객체를 사용하는 것보다 size 메서드로 크기를 구해 반복 처리하는 것이 속도가 더 빠르다
Iterator는 자동으로 index관리를 해주지만 아무래도 객체를 만들어서 사용하기 때문에 느린것 같다.
코드로 직접 확인해 보겠습니다.
생각했던 것 보다 동작시간에서 차이가 큰 모습을 보여준다!!