본문 바로가기

기술 학습

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

1. 컬렉션 프레임워크란?

Java 컬렉션 프레임워크(Collection Framework)는 여러 개의 데이터를 효율적으로 저장하고 관리할 수 있도록 제공되는 표준화된 클래스 및 인터페이스의 집합입니다. 배열보다 더 유연하고 다양한 기능을 제공하여 데이터 처리 및 조작을 쉽게 할 수 있습니다.

컬렉션 프레임워크의 주요 특징:

  • 자료 구조의 표준화: 다양한 데이터 구조를 쉽게 사용 가능
  • 재사용성: 자바의 표준 라이브러리에서 제공하는 컬렉션 클래스를 활용 가능
  • 성능 최적화: 다양한 자료 구조를 지원하여 효율적인 데이터 처리 가능

2. 주요 인터페이스 및 구현 클래스

컬렉션 프레임워크는 다음과 같은 주요 인터페이스와 클래스로 구성됩니다.

인터페이스설명주요 구현 클래스

List 순서가 있는 자료 구조, 중복 허용 ArrayList, LinkedList, Vector
Set 순서 없음, 중복 허용하지 않음 HashSet, LinkedHashSet, TreeSet
Map 키-값(Key-Value) 쌍으로 저장, 키 중복 불가 HashMap, LinkedHashMap, TreeMap
Queue FIFO(First-In-First-Out) 구조 LinkedList, PriorityQueue

3. List (순서가 있는 자료 구조)

List 인터페이스는 요소의 순서를 유지하며 중복 저장을 허용합니다.

3.1 ArrayList

import java.util.ArrayList;

public class ArrayListExample {
    public static void main(String[] args) {
        ArrayList<String> list = new ArrayList<>();
        list.add("Apple");
        list.add("Banana");
        list.add("Cherry");
        
        System.out.println("리스트 요소: " + list);
        
        list.remove("Banana");
        System.out.println("Banana 삭제 후: " + list);
    }
}

특징:

  • 내부적으로 배열을 사용하여 데이터를 저장
  • 삽입, 삭제가 빈번한 경우 LinkedList를 사용하는 것이 유리함

3.2 LinkedList

import java.util.LinkedList;

public class LinkedListExample {
    public static void main(String[] args) {
        LinkedList<Integer> list = new LinkedList<>();
        list.add(10);
        list.add(20);
        list.addFirst(5);
        list.addLast(30);
        
        System.out.println("LinkedList 요소: " + list);
    }
}

특징:

  • 노드 기반의 연결 리스트 구조
  • 삽입, 삭제가 빠르지만 검색 속도는 ArrayList보다 느림

4. Set (중복을 허용하지 않는 자료 구조)

4.1 HashSet

import java.util.HashSet;

public class HashSetExample {
    public static void main(String[] args) {
        HashSet<String> set = new HashSet<>();
        set.add("Java");
        set.add("Python");
        set.add("Java"); // 중복 값 추가 시 무시됨
        
        System.out.println("Set 요소: " + set);
    }
}

특징:

  • 요소의 순서를 보장하지 않음
  • 중복된 요소를 허용하지 않음
  • 빠른 검색 속도 제공

5. Map (키-값 저장 방식)

5.1 HashMap

import java.util.HashMap;

public class HashMapExample {
    public static void main(String[] args) {
        HashMap<Integer, String> map = new HashMap<>();
        map.put(1, "Apple");
        map.put(2, "Banana");
        map.put(3, "Cherry");
        
        System.out.println("HashMap 요소: " + map);
    }
}

특징:

  • 키-값 쌍으로 저장하며, 키는 중복을 허용하지 않음
  • 빠른 검색 속도를 제공하지만 순서를 유지하지 않음

6. Queue (FIFO 구조)

6.1 PriorityQueue

import java.util.PriorityQueue;

public class PriorityQueueExample {
    public static void main(String[] args) {
        PriorityQueue<Integer> pq = new PriorityQueue<>();
        pq.offer(30);
        pq.offer(10);
        pq.offer(20);
        
        System.out.println("PriorityQueue 요소: " + pq);
        System.out.println("가장 작은 요소: " + pq.poll()); // 10 출력 후 삭제
    }
}

특징:

  • 우선순위가 높은 요소부터 제거됨
  • 기본적으로 작은 숫자부터 우선적으로 처리

7. 컬렉션 프레임워크 정리

인터페이스 특징 대표적인 구현 클래스
List 순서 보장, 중복 허용 ArrayList, LinkedList
Set 중복 허용하지 않음, 순서 보장되지 않음 HashSet, TreeSet
Map 키-값 저장, 키 중복 불가 HashMap, TreeMap
Queue FIFO 구조, 우선순위 큐 지원 LinkedList, PriorityQueue

8. 결론

이번 글에서는 Java의 컬렉션 프레임워크를 구성하는 주요 인터페이스와 구현 클래스에 대해 알아보았습니다. 각 컬렉션의 특징을 이해하고 적절한 자료 구조를 선택하면 더 효율적인 프로그래밍이 가능합니다.

다음 글에서는 Java 스트림(Stream) API를 활용한 데이터 처리 방법에 대해 다뤄보겠습니다!