본문 바로가기
Java

컬렉션 프레임워크란(Collection Framework)?

by godkoo 2023. 6. 13.

Collection Framework ?

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

JDK 1.2 이전까지는 Vector, Hashtable, Properties와 같은 컬렉션 클래스들을 서로 각자 다른 방식으로 처리해야 했으나 JDK 1.2부터 컬렉션 프레임 워크가 등장하면서 다양한 종류의 컬렉션 클래스가 추가되고 모든 컬렉션 클래스를 표준화된 방식으로 다룰 수 있도록 체계화되었다.


컬렉션 프레임워크 주요 인터페이스

데이터를 저장하는 자료 구조에 따라 핵심 인터페이스를 정의하고 있다.

  1. List Interface
  2. Set Interface
  3. Map Interface

이 중에서 List와 Set 인터페이스는 모두 Collection 인터페이스를 상속 받지만, 구조상의 차이로 인해 Map 인터페이스는 별도로 정의된다.
컬렉션 프레임 워크는 다른 말로는 컨테이너 라고도 부른다. 값을 담는 그릇이라는 의미이며, 그 값의 성격에 따라서 컨테이너의 성격이 조금씩 달라진다.

주요 인터페이스 특징

인터페이스 특징 구현 클래스
Set<E> 순서가 없는 데이터 집합
데이터의 중복을 허용하지 않음
HashSet, TreeSet
List<E> 순서가 있는 데이터 집합
데이터의 중복을 허용함
ArrayList, Vector, LinkedList
Queue<E> First In First Out(FIFO) 구조 ArrayDeque,
PriorityQueue
Map<K, V> 키와 값의 한 쌍(pair)으로 이루어 지는 데이터 집합
순서가 없는 데이터 집합
키의 중복을 허용하지 않음 - 이미 키가 존재하면 덮어써 버림
HashMap,
TreeMap,
Hashtable,
Properties

아래 그림을 보고 주요 인터페이스를 확인하면 이해에 도움이 된다.

 


컬렉션 클래스들(Collection class)

컬렉션 프레임워크에 속하는 인터페이스를 구현한 클래스

컬렉션 프레임워크의 모든 컬렉션 클래스는 List, Set, Map 인터페이스 중 하나의 인터페이스를 구현 하며

클래스 이름에도 구현한 인터페이스의 이름이 포함되므로 바로 구분할 수 있다.

 

Collection Interface

List, Set Interface의 많은 공통된 부분을 Collection Interface에서 정의하고, 두 인터페이스는 그것을 상속받고 있다.

Collection Interface는 컬렉션을 사용함에 가장 기본적인 동작들을 정의하고 메소드로 제공한다.

아래는 Collection Interface 의 내부이다.

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);
    }
}

 

 

 

위 내용은 TCPschool.com의 글을 읽고 정리한 내용입니다.
코딩교육 티씨피스쿨
 

코딩교육 티씨피스쿨

4차산업혁명, 코딩교육, 소프트웨어교육, 코딩기초, SW코딩, 기초코딩부터 자바 파이썬 등

tcpschool.com

 

'Java' 카테고리의 다른 글

String StringBuffer StringBuilder란 무엇인가?  (0) 2023.06.02