Java 코딩 테스트 준비 - Collection 인터페이스, Iterable과 Iterator

기운찬곰·2023년 10월 3일
0
post-thumbnail

Overview

List, Set, Queue 이런 인터페이스는 사실 그 위에 Collection 인터페이스라는 조상을 가지고 있다. 덕분에 공통적으로 사용 가능한 여러 메서드가 있는데 이번 시간에는 이에 대해 알아보려고 한다. 추가적으로 Iterable과 Iterator 도 알아둘 필요가 있다. 이 역시 List, Set, Queue 에서 공통적으로 사용할 수 있는 기능이다. 자바의 세계는 역시 복잡해...😂


Collection 인터페이스

소개

자바에서 컬렉션 프레임워크란 다수의 데이터를 쉽고 효과적으로 처리할 수 있는 표준화된 방법을 제공하는 클래스의 집합을 의미한다. 즉, 데이터를 저장하는 자료구조와 데이터를 처리하는 알고리즘을 구조화하여 클래스로 구현해 놓은 것이다.

이러한 컬렉션 프레임워크는 자바의 인터페이스를 사용하여 구현되어있다.

이미지 출처 : https://nage.wo.tc/57

대표적인 3개 인터페이스 List, Set, Map 중에서 List와 Set은 모두 Collection 인터페이스를 상속받지만, 구조상의 차이로 인해 Map 인터페이스는 별도로 정의되어있다.

컬렉션 프레임워크를 구성하는 모든 클래스가 제네릭으로 표현되어있다는 것도 특징이다.

인터페이스구현 클래스설명
List<E>LinkedList, ArrayList, Vector순서가 있는 데이터의 집합으로, 데이터의 중복을 허용함.
Set<E>HashSet, TreeSet순서가 없는 데이터의 집합으로, 데이터의 중복을 허용하지 않음.
Map<K,V>HashMap, TreeMap, Hashtable키와 값의 한 쌍으로 이루어지는 데이터의 집합으로, 순서가 없음.

주요 메소드

List와 Set 인터페이스의 많은 공통된 부분을 Collection 인터페이스에서 정의하고, 두 인터페이스는 그것을 상속 받는다고 했다. 그렇다면 이 Collection 인터페이스에는 무엇이 정의되어있을까?

  • void clear() : 해당 컬렉션의 모든 요소를 제거함
  • boolean isEmpty() : 해당 컬렉션이 비어있는지를 확인함
  • int size() : 해당 컬렉션의 요소의 총 개수를 반환함
  • boolean add(E e) : 해당 컬렉션에 전달된 요소를 추가함
  • boolean remove(Object o) : 해당 컬렉션에서 전달된 객체를 제거함.
  • boolean contains(Object o) : 해당 컬렉션이 전달된 객체를 포함하고 있는지를 확인함.
  • Iterator<E> iterator() : 해당 컬렉션의 반복자(iterator)를 반환함.

저 표에는 없지만 indexOf에 대해도 알아두면 좋을거 같다. 목록에서 지정된 요소가 처음 나타나는 인덱스를 반환하거나 요소를 찾을 수 없으면 -1을 반환한다.

List<Integer> values = List.of(5, 3, 4, 7, 6, 2, 9, 6);
int item = 6;

int index = values.indexOf(item);
System.out.println(index);

Iterable과 Iterator

소개

  • Iterable 인터페이스 안에는 iterator 메소드가 추상메소드로 선언이 되어있다.
  • 따라서 List, Set, Queue 를 구현하는 클래스들은 다 iterator 메소드를 가지고 있다.
  • 이 iterator 함수를 통해 Iterator 인터페이스를 반환하는데 이 Iterator는 Collection 과는 별개로 존재하는 인터페이스이다. (겁나 헷갈리네)
  • 이 안에는 hasNext(), next(), remove()가 구현되어있고 이런 메서드를 이용할 수 있게 된다. 용도는 컬렉션클래스의 데이터를 하나씩 읽어올 때 사용한다.

사용법

따라서 이런식으로 코드를 사용할 수 있는 것도 다 그런 이유에서이다. 파이썬에서도 이런 비슷한 개념이 있지. ㅇㅇ

List list = new ArrayList(); 

Iterator it = list.iterator();
 
while(it.hasNext()) {
    System.out.println(it.next());
}
profile
velog ckstn0777 부계정 블로그 입니다. 프론트 개발 이외의 공부 내용을 기록합니다. 취업준비 공부 내용 정리도 합니다.

0개의 댓글

관련 채용 정보