hanker

JAVA - JAVA에서 컬렉션 프레임워크란 무엇일까? 본문

JAVA

JAVA - JAVA에서 컬렉션 프레임워크란 무엇일까?

hanker 2024. 11. 28. 00:00
반응형

이번 글에서는 Java에서 컬렉션 프레임워크가 무엇인지에 대해서 알아보자.
 
 

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

 

컬렉션 프레임워크는 자바에서 데이터를 효율적으로 저장하고 관리하기 위해 제공하는 데이터 구조와 알고리즘의 표준화된 아키텍처이다. 주로 여러 개의 데이터를 효과적으로 처리하기 위해 사용되며, 데이터 추가, 삭제, 검색, 정렬 등의 작업을 용이하게 수행할 수 있도록 설계되어 있다.

 


1. 컬렉션 프레임워크 구조

 

java.util
 ├── Collection
 │    ├── List
 │    │    ├── ArrayList
 │    │    ├── LinkedList
 │    │    └── Vector
 │    ├── Set
 │    │    ├── HashSet
 │    │    ├── LinkedHashSet
 │    │    └── TreeSet
 │    └── Queue
 │         ├── PriorityQueue
 │         └── Deque
 └── Map
      ├── HashMap
      ├── LinkedHashMap
      ├── TreeMap
      └── Hashtable

 


2. 주요 인터페이스와 클래스

 

컬렉션 프레임워크는 다음과 같은 주요 인터페이스와 이를 구현하는 클래스들로 구성된다.
 
2.1 인터페이스

  1. Collection 인터페이스 (모든 컬렉션의 상위 인터페이스)
    • List: 순서가 있는 데이터 저장 (중복 허용)
      • 예: ArrayList, LinkedList, Vector
    • Set: 순서가 없고 중복을 허용하지 않는 데이터 저장
      • 예: HashSet, LinkedHashSet, TreeSet
    • Queue: FIFO(First-In-First-Out) 구조를 따르는 데이터 저장
      • 예: PriorityQueue, Deque
  2. Map 인터페이스 (키-값 쌍으로 데이터를 저장)
    • 예: HashMap, LinkedHashMap, TreeMap, Hashtable

2.2 클래스

  • ArrayList: 크기가 동적으로 변경되는 배열
  • HashSet: 중복을 허용하지 않고, 순서를 보장하지 않는 집합
  • HashMap: 키-값 쌍으로 저장하며, 키의 중복을 허용하지 않음

3. 주요 특징

 
 

각각의 특징을 코드를 보면서 알아보자
데이터 저장 및 조작: 데이터를 저장하고 조작하는 데 필요한 인터페이스, 클래스 및 메서드를 포함한다.

public static void main(String[] args) {
    ArrayList<String> list = new ArrayList<>();
    list.add("가");
    list.add("나");
    list.add("다");
    list.add("라");

    System.out.println("리스트: " + list);
    list.remove("나");
    System.out.println("리스트: " + list);
}

 
 
재사용 가능: 표준화된 구조로 코드 재사용성을 높인다.

// 공통 메서드: Map 인터페이스를 기반으로 동작
public static void printMap(Map<Integer, String> map) {
    for (Map.Entry<Integer, String> entry : map.entrySet()) {
        System.out.println("Key: " + entry.getKey() + ", Value: " + entry.getValue());
    }
}

public static void main(String[] args) {
    // HashMap 사용
    Map<Integer, String> hashMap = new HashMap<>();
    hashMap.put(1, "가");
    hashMap.put(2, "나");

    System.out.println("HashMap:");
    printMap(hashMap);

    // TreeMap 사용
    Map<Integer, String> treeMap = new TreeMap<>();
    treeMap.put(3, "다");
    treeMap.put(4, "라");

    System.out.println("\nTreeMap:");
    printMap(treeMap);
}

printMap 메서드는 Map 인터페이스를 사용하여 HashMap, TreeMap 등 다양한 맵 타입에서 동일하게 동작한다.
 
다양한 구현: 다양한 데이터 구조(리스트, 집합, 맵 등)를 필요에 따라 선택하여 사용할 수 있다.

public static void main(String[] args) {

    ArrayList<String> arrayList = new ArrayList<>();
    arrayList.add("ArrayList");

    LinkedList<String> linkedList = new LinkedList<>();
    linkedList.add("LinkedList");

    System.out.println(arrayList);
    System.out.println(linkedList);

    HashSet<Integer> numbers = new HashSet<>();
    numbers.add(1);
    numbers.add(2);
    numbers.add(3); // 중복 데이터는 저장되지 않음

    System.out.println("Set: " + numbers);


    HashMap<Integer, String> map = new HashMap<>();
    map.put(1, "가");
    map.put(2, "나");

    System.out.println("Map: " + map);
}

 
 
 
제네릭(Generic) 지원: 타입 안정성을 제공하여 컴파일 시 타입 검사를 강화한다.

public static void main(String[] args) {
    // 제네릭 사용: String 타입의 데이터만 저장 가능
    ArrayList<String> names = new ArrayList<>();
    names.add("hanker");
    names.add("eddy");

    // 컴파일 시 타입 안정성 제공
    // names.add(123); // 컴파일 에러 발생
    for (String name : names) {
        System.out.println(name);
    }
}

4. 컬렉션 프레임워크의 장점

 
위 특징에서와 같이 데이터 구조 구현 / 코드 간결성 / 재사용 / 제네릭을 통한 안정성 등이 장점으로 꼽힌다.


5. 참고사항

 
 

- 멀티스레드 환경에서는 Collections.synchronizedList 또는 ConcurrentHashMap 같은 스레드 안전 컬렉션을 사용해야 한다.
- 성능 요구사항에 따라 적절한 데이터 구조를 선택하는 것이 중요하다.
 
 
 

 

컬렉션 프레임워크는 자바 개발에서 필수적으로 사용되는 부분이므로, 다양한 데이터 구조와 사용 방법을 숙지하는 것이 중요하다.
 

 

반응형