언어(Programming Language)/Java

[Java] Collection 개념

RyanSin 2023. 11. 25. 17:28
반응형

개요

안녕하세요. 이번 시간에는 Java Collection의 대해 알아보겠습니다.

 

네이버 사전 제공

 

Collection이라는 단어의 뜻을 살펴보면 다음과 같습니다.

 

수집품, 소장품 우리는 개발을 하다 보면 데이터를 수집하고 원하는 방식으로 데이터를 가공하고 그 데이터를 사용해야 합니다. 이때 사용하는 게 Conllection입니다.

 

 

 

 

 

하지만 Collection은 인터페이스(Interface)입니다. 하위 Collection 인터페이스를 사용하고 있는 클래스에 알아야 합니다.

 

자료 구조

방금 Collection을 알아보면서 데이터를 수집하고 가공 그리고 사용한다고 표현했습니다.

자료구조는 어떤 정보를 담는 것을 의미하며, 하나의 데이터가 아닌 여러 데이터를 효율적으로 관리할 때 표현합니다.

 

그럼 Java에서는 어떤 자료구조가 있을까요?

  1. 순서가 있는 자료구조 List
  2. 순서가 중요하지 않는 자료구조 Set
  3. 먼저 들어온 것이 먼저 나가는 Queue 형
  4. Key-Value(키-값)으로 저장되는 Map 형

 

Java에서는 List와 Set, Queue는 Collection이라는 인터페이스를 구현하고 있고, Map은 따로 속해 있습니다.

 

또한 위 인터페이스들은 다음과 같이 java.util 패키지에 선언되어 있습니다. 그리고 Collection는 Iterable은 extends 하고 있습니다.

 

위 그림에는 없지만 다양한 자료 구조가 Collection을 구현하고 있습니다. 아래 주석을 참고해 주세요!

/**
 * This interface is a member of the Java Collections Framework.
 * Implementation Requirements: The default method implementations (inherited or otherwise) do not apply any synchronization protocol. If a Collection implementation has a specific synchronization protocol, then it must override default implementations to apply that protocol.
 * Since: 1.2
 * See Also: Set, 
 *           List, 
 *           Map, 
 *           SortedSet, 
 *           SortedMap, 
 *           HashSet, 
 *           TreeSet, 
 *           ArrayList, 
 *           LinkedList, 
 *           Vector, 
 *           Collections, 
 *           Arrays, 
 *           AbstractCollection
 * Author: Josh Bloch, Neal Gafter
 * Type parameters: the type of elements in this collectio
 */
public interface Collection<E> extends Iterable<E> {...}

 

Iterable이라는 인터페이스를 확인해 보면 Iterator라는 인터페이스를 반환하는 메서드가 있습니다.

Iterator<T> iterator();

 

여기서 주요한 내용은 Collection 인터페이스가 Iterable 인터페이스를 확장하고 있어서 Iterator 인터페이스를 사용하여 데이터를 순차적으로 가져올 수 있다는 의미입니다.

 

실제 Iterator 인터페이스에는 다음과 같은 메서드가 있습니다.

  1. hashNext() : 데이터가 있는지 확인하는 메서드 - 아직 검사하지 않은 원소가 남아있다면 true를 리턴합니다.
  2. next() : 현재 위치를 다음 요소로 넘기고 그 값을 리턴해주는 메서드
  3. remove(): 데이터를 삭제해 주는 메서드
  4. forEachremaining(): 자바 8 버전에 생겨났습니다. 모든 요소가 처리되거나 작업에서 예외가 발생할 때까지 나머지 각 요소에 대해 지정된 작업을 수행하는 메서드

메서드(Method)

package java.util;

import java.util.function.IntFunction;
import java.util.function.Predicate;
import java.util.stream.Stream;
import java.util.stream.StreamSupport;

public interface Collection<E> extends Iterable<E> {
    int size();

    boolean isEmpty();

    boolean contains(Object o);

    Iterator<E> iterator();

    Object[] toArray();

    <T> T[] toArray(T[] a);

    default <T> T[] toArray(IntFunction<T[]> generator) {
        return toArray(generator.apply(0));
    }

    boolean add(E e);

    boolean remove(Object o);

    boolean containsAll(Collection<?> c);

    boolean addAll(Collection<? extends E> c);

    boolean removeAll(Collection<?> c);

    default boolean removeIf(Predicate<? super E> filter) {
        Objects.requireNonNull(filter);
        boolean removed = false;
        final Iterator<E> each = iterator();
        while (each.hasNext()) {
            if (filter.test(each.next())) {
                each.remove();
                removed = true;
            }
        }
        return removed;
    }

    boolean retainAll(Collection<?> c);

    void clear();

    boolean equals(Object o);

    int hashCode();

    @Override
    default Spliterator<E> spliterator() {
        return Spliterators.spliterator(this, 0);
    }

    default Stream<E> stream() {
        return StreamSupport.stream(spliterator(), false);
    }

    default Stream<E> parallelStream() {
        return StreamSupport.stream(spliterator(), true);
    }
}

 

기본적으로 지원하는 메서드들이 많이 있습니다. Java 개발을 해보신 분들은 대략적으로 어떤 메서드인지 알 수 있습니다.

해당 메서드는 하나하나 차근차근 다음 자료구조 시간에 설명하겠습니다.