일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
- 스프링 부트
- spring
- 1
- Bean
- 스프링
- zepettoworld.com
- DispatcherServlet
- autowired
- layout #thymeleaf #화면분할
- git #gitlab #github
- 오토와이어드
- Component
- Today
- Total
기록과 정리
Iterator/ListIterator/Enumeration 란? 본문
이 글은 남궁성님의 '자바의 정석 (3판)'을 참고하였습니다.
http://www.kyobobook.co.kr/product/detailViewKor.laf?mallGb=KOR&ejkGb=KOR&barcode=9788994492032
Iterator/ListIterator/Enumeration 란?
Iterator / ListIterator / Enumeration 은 컬렉션 요소에 접근하는 데 사용하는 인터페이스다.
Iterator
자바에 컬렉션 프레임워크가 도입이 되면서 컬렉션에 접근하는 방법을 표준화할 필요가 생겼고 , Iterator 인터페이스는 그중에 하나의 방법이다. Enumeration은 Iterator의 구버전이라고 생각하면 되고, 가급적 Iterator을 사용하도록 하자.
메서드
- boolean hasNext() : 읽어올 요소가 있는지 확인. 있으면 true, 없으면 false
- Object next() : 다음 요소가 있는지 확인. next()를 호출하기전 hasNext()로 확인해주어야 RuntimeException을 피할 수 있다.
- void remove() : next()에서 가져온 요소를 삭제한다. remove의 경우, 단독으로 쓰일 수 없고 next()와 같이 써야 함. 특정 요소를 삭제하는 것이 아닌 읽어 온 것을 삭제한다. next() 호출 없이 remove()를 호출 시 IllegalStateException이 발생한다.
참고) Collection으로 참조변수를 선언하게 되면 ArrayList가 아닌 LinkedList로 변경해야 할 경우, 선언문 하나만 변경만 하면 된다. 나머지 코드는 검토하지 않아도 된다. (무조건은 아님).
위에서 List 인터페이스의 경우, 그냥 사용하면 되지만..Map은 iterator를 직접적으로 호출할 수 없어 Set의 형태로 변환시켜 다시 iterator를 호출해야 한다.
remove()
remove()의 경우, 선택적 기능이라 하여 Iterator 구현하는 클래스에 꼭 구현해야 하는 것은 아니다.
인터페이스로부터 상속받는 메서드는 추상 메서드라 몸통(body)을 반드시 만들어주고 UnsupportedOperationException을 throw 해주어야 한다. 그렇지 않으면 소스를 찾아보기 전까진 다른 개발자에게 동작하지 않는 이유를 쉽게 알려주기 어렵기 때문이다.
ListIterator와 Enumeration
- Enumeration : Iterator의 구버전
- ListIterator : List를 구현한 경우에만 한정된 양방향 조회 기능을 가진 Iterator
위에서 언급한 바와 같이 Enumeration의 메서드에는
- boolean hasMoreElements() : 읽어올 요소가 있는지 확인. 있으면 true, 없으면 false. Iterator의 hasNext()와 같다.
- Object nextElement() : 다음 요소를 읽어 들인다. Iterator의 next()와 같다.
ListIterator는 조금 많은 관계로 몇 가지만 소개해 보면
- Object previous() : 이전 요소를 읽어 온다.
- Object next() : 다음 요소를 읽어 온다.
- int previousIndex() : 이전 요소의 index를 반환한다.
- int nextIndex() : 다음 요소의 index를 반환한다.
양방향으로 이동 가능하기 때문에 각 요소 이동이 조금 더 쉽다. 다만 List를 구현했을 경우에만 한정적이다.
'IT > Java' 카테고리의 다른 글
Java8 Stream API (스트림 API) (0) | 2021.08.12 |
---|---|
기본 메서드와 스태틱 메서드 (0) | 2021.08.03 |
람다표현식&메소드 레퍼런스 (0) | 2021.07.26 |
Java 함수형 인터페이스 (0) | 2021.07.20 |
가비지 컬렉션 (Garbage Collection) GC란? (0) | 2021.02.02 |