티스토리 뷰
반응형
Iterator 는 자바의 컬렉션 프레임워크에서 컬렉션에 저장되어 있는 요소들을 읽어오는 방법의 표준으로
컬렉션 프레임워크는 다음과 같이 데이터를 저장하는 구조에 따라 3가지 인터페이스로 구성된다.
Iterator 는 Set, List, Map 과 같은 데이터 집합체로부터 정보를 얻어낸다고 볼 수 있고,
집합체를 다룰 때는 개별적인 클래스에 대해 데이터를 읽는 방법을 알아야 하기 때문에
각 컬렉션에 접근이 힘들어진다.
하지만 Iterator 를 쓰게 되면 어떤 컬렉션이라도 동일한 방식으로 접근이 가능하여
그 안에 있는 항목들에 접근할 수 있는 방법을 제공한다.
Iterator 메소드는 다음과 같다.
- hasNext() : 읽어올 요소가 남아있는지 확인하는 메소드로 요소가 있다면 true, 없다면 false
- next() : 다음 데이터를 반환
- remove() : next() 로 읽어온 요소를 삭제
사용법
int index = 0;
for (GreengrassDeviceModel device : requestModel.getDevices()) {
if (StringUtils.isEmpty(device.getCertificateArn())) {
ThingCertificateDetailDataModel thingCertificateDetailDataModel = this.findOneThingCertificateById(device.getCertificateId());
requestModel.getDevices().get(index).setCertificateArn(thingCertificateDetailDataModel.getCertificateArn());
}
index++;
}
기존 향상된 for문에서 Iterator for문으로 수정하면 아래와 같이 된다.
List<GreengrassDeviceModel> list = requestModel.getDevices();
for (Iterator<GreengrassDeviceModel> iterator = list.iterator(); iterator.hasNext();) {
GreengrassDeviceModel element = iterator.next();
if (StringUtils.isEmpty(element.getCertificateArn())) {
ThingCertificateDetailDataModel thingCertificateDetailDataModel = this.findOneThingCertificateById(element.getCertificateId());
element.setCertificateArn(thingCertificateDetailDataModel.getCertificateArn());
}
}
requestModel.setDevices(list);
기존 방법은 중간에 디바이스가 삭제되거나 변경사항이 생겼을 때 영향을 받지 않지만
Iterator 를 사용하면 문제없이 for문을 돌릴 수 있다는 것이 장점이다.
(참고 : tcpschool.com/java/java_collectionFramework_iterator, shxrecord.tistory.com/74)
반응형
'Java' 카테고리의 다른 글
[Java] @Builder (0) | 2021.02.10 |
---|---|
[Java] Source Builder (0) | 2021.02.10 |
[Java] 정규표현식 Pattern, Matcher (0) | 2021.02.10 |
[Java] Object의 Field 값 얻는 방법 (0) | 2021.02.10 |
[Java] URI 한글 인코딩 이슈 (0) | 2021.02.10 |