본문 바로가기
Language/Java

[Java API] 컬렉션 프레임워크(Collection Framework)

by 클레어몬트 2024. 9. 18.

https://claremont.tistory.com/category/Computer%20Science/%EC%9E%90%EB%A3%8C%EA%B5%AC%EC%A1%B0

 

'Computer Science/자료구조' 카테고리의 글 목록

전자정보통신공학, 컴퓨터공학 전공

claremont.tistory.com

https://claremont.tistory.com/category/Computer%20Science/%EC%95%8C%EA%B3%A0%EB%A6%AC%EC%A6%98

 

'Computer Science/알고리즘' 카테고리의 글 목록

전자정보통신공학, 컴퓨터공학 전공

claremont.tistory.com

(자료구조와 알고리즘 개념이 잡혀있어야 한다)

 

 

컬렉션 프레임워크(Collection Framework): 데이터를 저장하고 조작하는 데 유용한 자료구조와 알고리즘을 제공하는 표준화된 라이브러리

Map 인터페이스는 홀로 있다

 

이 프레임워크는 데이터를 효율적으로 다루기 위해 다양한 인터페이스와 그 구현체들을 포함하고 있으며, 여러 자료구조(리스트, 세트, 맵 등)와 그에 따른 알고리즘을 사용하기 쉽게 만들어져 있다

 

 

[컬렉션 프레임워크의 구성]

1. 인터페이스(Interfaces)

인터페이스는 컬렉션의 핵심 개념을 정의하며, 이를 통해 컬렉션의 다양한 동작을 규정한다. 대표적인 인터페이스로는 Collection, List, Set, Queue, Map 등이 있다.

2. 구현체(Implementations)

인터페이스는 실제 구현체들을 통해 사용된다. 각 구현체는 특정한 성능 특성에 맞추어 제공된다. 예를 들어, ArrayList는 배열 기반으로 랜덤 액세스가 빠르지만, 요소를 중간에 삽입하거나 삭제하는 작업이 느릴 수 있다. 반면 LinkedList는 이러한 작업에 유리하지만, 인덱스 기반 접근은 느리다.

3. 알고리즘(Algorithms)

컬렉션 프레임워크는 정렬, 검색, 복사 등 다양한 알고리즘을 제공하며, 대부분 Collections 클래스에 정적 메서드로 구현되어 있다.

  • 정렬: Collections.sort() 메서드를 사용하여 리스트를 정렬
  • 검색: Collections.binarySearch()를 사용하여 정렬된 리스트에서 이진 검색을 수행
  • 반복(iteration): Iterator나 for-each 문을 통해 컬렉션의 요소를 순차적으로 처리

 

[주요 인터페이스와 주요 구현체들]

1. Collection 인터페이스

Collection 인터페이스 java.util 패키지의 컬렉션 프레임워크의 핵심 인터페이스 중 하나이다. 이 인터페이스는 자바에서 다양한 컬렉션, 즉 데이터 그룹을 다루기 위한 메서드를 정의한다. Collection 인터페이스는 List, Set, Queue 와 같은 다양한 하위 인터페이스와 함께 사용되며, 이를 통해 데이터를 리스트, 셋, 큐 등의 형태로 관리할 수 있다. (Collection 인터페이스는 모든 컬렉션의 기본이 되는 인터페이스로, Java에서 제공하는 대부분의 컬렉션 클래스는 이 인터페이스를 구현한다.)

2. List 인터페이스 (순서 O,  중복 O)

  • List는 순서가 있는 요소들의 집합을 다루며, 중복을 허용
  • 인덱스를 통해 요소에 접근할 수 있으며, 삽입 순서가 보장
  • e.g. 장바구니 목록, 순서가 중요한 일련의 이벤트 목록
  • 주요 구현체:
    • ArrayList: 배열 기반의 리스트로, 랜덤 액세스가 빠르고, 크기가 자동으로 조정
    • LinkedList: 이중 연결 리스트로, 삽입과 삭제가 빈번한 경우 유리

3. Set 인터페이스 (순서 X,  중복 X)

  • Set(집합)은 중복을 허용하지 않는 데이터 집합을 다룰 때 사용
  • 순서가 중요한 경우가 아니거나 중복을 제거하고자 할 때 사용
  • e.g. 회원 ID 집합, 고유한 항목의 집합
  • 주요 구현체:
    • HashSet: 해시 기반의 Set으로, 순서 보장 X
    • LinkedHashSet: 삽입된 순서를 유지하는 HashSet
    • TreeSet: 이진 트리 구조를 사용해 요소들이 자동으로 정렬된 순서를 가지는 Set

4. Map 인터페이스 (순서 X,  key: 중복 X / value: 중복 O)

  • Map은 키(key)와 값(value)의 쌍으로 이루어진 데이터를 다룰 때 사용 (사전 ADT 개념에 부합)
  • 키는 중복을 허용하지 않으며, 각 키는 하나의 값과만 연결
  • 주요 구현체:
    • HashMap: 해시 기반의 Map으로, 순서를 보장하지 않으며 매우 빠른 검색 속도를 자랑
    • LinkedHashMap: 삽입된 순서를 유지하는 HashMap
    • TreeMap: 이진 트리 구조를 사용해 키들이 자동으로 정렬된 Map
    • Hashtable: HashMap과 유사하지만 스레드 안전(synchronized)

5. Queue 인터페이스 (순서 O, 중복 O)

  • Queue는 FIFO(First-In-First-Out) 방식으로 요소를 처리하는 자료구조
  • 주로 작업을 대기열 방식으로 처리하는 데 사용
  • 주요 구현체:
    • Deque 인터페이스: 양쪽에서 삽입과 삭제가 가능한 큐
    • - ArrayDeque
    • - LinkedList

 

 

[모든 컬렉션 인터페이스에서 공통적으로 사용할 수 있는 기본 뼈대 메서드]

  • add(E e): 컬렉션에 요소 추가
  • remove(Object o): 컬렉션에 특정 요소 제거
  • size(): 컬렉션에 저장된 요소 개수 반환
  • isEmpty(): 컬렉션이 비어 있는지 여부 반환
  • contains(Object o): 특정 요소가 컬렉션에 있는지 확인
  • iterator(): 컬렉션 요소에 접근하기 위한 반복자를 반환
  • clear(): 컬렉션의 모든 요소 제거

※ Map 인터페이스는 컬렉션 인터페이스를 상속받지 않아 add() 대신 put()을 쓴다

 

 

 

 

 

(참고) Vector 자료구조는 현재 아예 사용하지 않는다. 또한 Stack 클래스가 이 Vector 자료구조를 이용하기 때문에 Stack 클래스도 사용하지 않고, 대신 Deque 인터페이스를 사용한다

 

참고 및 출처: 김영한의 실전 자바 - 중급 2편

https://www.inflearn.com/course/%EA%B9%80%EC%98%81%ED%95%9C%EC%9D%98-%EC%8B%A4%EC%A0%84-%EC%9E%90%EB%B0%94-%EC%A4%91%EA%B8%89-2