Restful API 기반 프로젝트를 진행하던 중 데이터 찾는 과정에서 Iterator를 사용해서 기능 구현을 했는데, 프레임워크인 건 알지만 정확한 개념에 대해 알아보기 위해 포스팅을 해보겠습니다.
Iterator 개념
Iterator 란 컬렉션(Collection)과 같은 데이터 구조에서 요소를 순회하고 선택적으로 해당 요소를 가져오는 데 사용되는 인터페이스입니다. Iterator 패턴은 소프트웨어 디자인 패턴 중 하나로, 데이터 구조의 내부 구현에 독립적으로 순회 기능을 제공하여 코드의 일관성과 유연성을 높입니다.
Iterator에 대해서 알아보신다면 먼저 컬렉션 프레임워크에 대해 알고 있어야 하는데, 컬렉션 프레임워크는 데이터를 저장하는 클래스들을 표준화한 설계입니다.
데이터를 저장하는 구조에 따라 3가지 인터페이스로 구성되는데, 자세한 개념은 이전에 포스팅을 했기 때문에 생략하겠습니다.
(Collertion Framework에 대해 공부중이신 분들은 아래에 링크 남겨드리겠습니다. 참고하시면 좋을 거 같습니다.)
Iterator의 특징은 다음과 같습니다.
- 순회 기능 제공 :
- Iterator는 컬렉션 내의 요소들을 순서대로 접근할 수 있는 기능을 제공합니다. 이렇게 컬렉션의 내용을 순회하면서 데이터를 처리하는 것을 Iteration이라고 합니다.
- 내부 구현과 분리 :
- Iterator는 컬렉션 내부의 구현과 분리되어 있습니다. 즉, 개발자들은 컬렉션의 구현 방식을 알 필요 없이 Iterator를 사용하여 순회할 수 있습니다.
- 표준화된 인터페이스 :
- Iterator는 특정 컬렉션에 종속되지 않도록 표준화된 인터페이스를 제공합니다. 이로 인해 동일한 Iterator 인터페이스를 사용하여 다양한 종류의 컬렉션을 순회할 수 있습니다.
Iterator는 이런 집합체로부터 정보를 얻어낸다고 볼 수 있습니다.
집합체를 다룰 때는 개별적인 클래스에 대해 데이터를 읽는 방법을 알아야 하기 때문에 각 컬렉션에 접근이 힘들어집니다.
Iterator를 쓰게 되면 어떤 컬렉션이라도 동일한 방식으로 접근이 가능하여 그 안에 있는 항목들에 접근할 수 있는 방법을 제공합니다.
다음은 Iterator 메소드에 대해 알아봅시다.
- hasNext() : 다음 요소가 있는지 여부를 확인하는 메서드로, 반환값으로 boolean(true/false)을 반환합니다.
- next() : 다음 요소를 반환하는 메소드로, 컬렉션의 다음 요소에 접근하고 반환합니다.
- remove() : 현재 순회 중인 요소를 삭제하는 메서드로, 필수적인 것은 아니지만 일부 Iterator 구현에서 지원될 수 있습니다.
예제 코드
Iterator 메소드를 간단한 예제 코드를 통해서 알아봅시다.
아래 코드는 Rest API 기반의 코드로, 해당 유저 ID값을 가지고 리스트 값을 순차적으로 접근해서 동일한 ID값이 있다면 remove() 메서드를 사용해서 삭제합니다.
public User deleteMyId(int id){
Iterator<User> iterator = users.iterator();
while (iterator.hasNext()){//순차적으로
User user = iterator.next();
if (user.getId() == id){ // 동일한 id가 있다면 remove(삭제)
iterator.remove();
return user;
}
}
return null;
}
확인 코드로는 PostMan으로 알아보겠습니다.
위 사진을 보면 JSON 데이터로 4개가 있습니다.
결과를 확인하기 위해 4번 apply 데이터와 1번 데이터를 삭제해보겠습니다.
id 값 = 4를 입력하고 Send 버튼을 클릭했더니 정상적으로 200 코드가 나왔습니다.
다시 리스트를 확인해 보면 삭제했던 1,4번 id값은 없고, 2,3번 id값만 리스트에 출력되는 걸 볼 수 있습니다.
Java에서는 Iterator 인터페이스를 많이 활용하여 컬렉션과 다양한 데이터 구조를 순회하는 데 사용됩니다.
Iterator를 활용하면 컬렉션의 내부 구현과는 독립적으로 요소들을 간단하게 순회하고 처리할 수 있으며, 코드의 가독성과 유지 보수성을 향상하는 데 좋습니다.
마치며
오늘은 Iterator 인터페이스의 개념에 대해 알아봤습니다.
다음 포스팅에서 뵙겠습니다.
'[ JAVA ] > JAVA' 카테고리의 다른 글
[ Java ] Optional 개념 및 올바른 사용법 알아가기 (1) | 2024.06.10 |
---|---|
[ Java ] java.util.stream.IntStream 주요 메서드 정리 (1) | 2024.05.23 |
[ Java ] Lambda (0) | 2023.01.17 |
[ Java ] File 클래스 (0) | 2023.01.16 |
[ Java ] Socket Programming (0) | 2023.01.13 |