본문 바로가기

Language/Java

[Java] Collection Framework 소개

(원문은 하단에 링크가 있습니다. 의역했습니다.)

알고리즘을 공부하다 ArrayList, HashMap 과 같은 컬렉션 프레임워크(Collection Framework)의 클래스들을 자주 사용하게 되었다. 그러다 문득 다른 클래스는 어떤게 있고 어떻게 활용 할 수 있을 지 공부해보고자 마음을 먹었다.

 

우선 oracle에서 제공하는 문서를 읽어 보았다.

 

간략하게 말해 컬렉션(Collection)을 조작하고 여러 API가 컬렉션 프레임워크를 사용하여 데이터를 주고받는 것이 가능하다는 말이다.(컬렉션이 정확히 뭔지 나중에 찾아보겠음)

 

OverView

컬렉션 프레임워크의 장점

  1.  프로그래밍 노동력 절감
  2. 성능 향상
  3. API 사이의 호환성
  4. API를 배우는 노력 절감
  5. API를 디자인 하거나 고안하는 노력 절감
  6. 재사용성 향상

 

컬렉션 프레임워크의 특징

  1. 컬렉션 인터페이스 제공
  2. 범용 구현(기본에 충실하여 여러곳에 사용 가능)
  3. Vector와 Hashtable은 컬렉션 프레임워크를 위해 수정되었다.
  4. 표준이 아니라 사용이나 동작에 제한이 있다.
  5. "병행"처리 가능
  6. Wrapper (synchronization 등 구현)
  7. 성능 최적화
  8. 커스터마이징 (인터페이스, 추상 클래스 이용)
  9. sorting 등 스태틱 메소드 제공
  10. 다양한 인터페이스 제공
  11. 객체나 원시타입의 배열을 지원

컬렉션 인터페이스는 java.util.Collection 인터페이스 그룹과 java.util.Map 그룹이 있다.

java.util.Collection 그룹

java.util.Set
java.util.SortedSet
java.util.NavigableSet
java.util.Queue
java.util.concurrent.BlockingQueue
java.util.concurrent.TransferQueue
java.util.Deque
java.util.concurrent.BlockingDeque
java.util.Map 그룹

java.util.SortedMap
java.util.NavigableMap
java.util.concurrent.ConcurrentMap
java.util.concurrent.ConcurrentNavigableMap

 

컬렉션 인터페이스는 라벨이 붙을 수도 있는데 해당사항을 시도하려하면 런타임 예외(Runtime Exception)으로 UnsupportedOperationException을 발생시킨다.

라벨의 예시로는

  • 수정 불가능(Unmodifiable) : 행위(Operation)를 수정하려 할 수 없다.
  • 불변성(Immutable) : 컬렉션 자체를 수정 할 수 없다.
  • 고정 크기(Fixed-size) : 리스트의 원소들은 변할 수 있지만 고정된 크기를 유지한다.
  • Random Access List, Sequential Access List : 인뎅싱 되어 빠른시간안에 원하는 원소에 접근하는 것을 랜덤 액세스 리스트(Random Access List)라고 한다. 반면, 순차적으로 원소에 접근 할 수 있는 것을 순차 접근 리스트(Sequential Access List)라고 한다.

어떤 구현은 특정 원소만 저장 하게 제한(Restrict) 한다. 제한을 지키지 않을 경우 예외(보통 ClassCastException, IllegalArgumentException, NullPointerException)가 발생한다.

예를 들어

  • 특정 타입
  • NOT NULL
  • 특정 Predicate 조건을 지키게

(함수형 인터페이스 Predicate는 추후 설명 예정, 특정 조건을 만족하는지 조사하는 용도)

 

구현 방식(Implementation-style), 인터페이스(Interface)에 따라 구현 된 클래스를 분류 해 보면

Interface Hash Table Resizable Array Balanced Tree Linked List Hash Table + Linked List
Set HashSet   TreeSet   LinkedHashSet
List   ArrayList   LinkedList  
Deque   ArrayDeque   LinkedList  
Map HashMap   TreeMap   LinkedHashMap

 

멀티 스레드 환경에서 동기화를 지원하는 컬렉션이 있다.

병행 인식 인터페이스(Concurrent-aware interfaces)

  • BlockingQueue
  • TransferQueue
  • BlockingDeque
  • ConcurrentMap
  • ConcurrentNavigableMap

병행 인식 클래스(Concurrent-aware implementation class)

  • LinkedBlockingQueue
  • ArrayBlockingQueue
  • PriorityBlockingQueue
  • DelayQueue
  • SynchronousQueue
  • LinkedBlockingDeque
  • LinkedTransferQueue
  • CopyOnWriteArrayList
  • CopyOnWriteArraySet
  • ConcurrentSkipListSet
  • ConcurrentHashMap
  • ConcurrentSkipListMap

 

마지막으로 컬렉션 프레임 워크의 모든 인터페이스, 클래스, Wrapper, Adapter, 편의를 위한 기능을 보고 싶다면 아래의 링크를 통해 볼 수 있다.

docs.oracle.com/en/java/javase/15/docs/api/java.base/java/util/doc-files/coll-reference.html

 

Outline of the Collections Framework (Java SE 15 & JDK 15)

Outline of the Collections Framework The collections framework consists of: Collection interfaces - The primary means by which collections are manipulated. Collection - A group of objects. No assumptions are made about the order of the collection (if any)

docs.oracle.com

 

 

참고자료

1. Oracle Collection FrameWork DOCUMENT

docs.oracle.com/en/java/javase/15/docs/api/java.base/java/util/doc-files/coll-index.html

 

The Collections Framework (Java SE 15 & JDK 15)

The Collections Framework The collections framework is a unified architecture for representing and manipulating collections, enabling them to be manipulated independently of the details of their representation. It reduces programming effort while increasin

docs.oracle.com

 

 

'Language > Java' 카테고리의 다른 글

[Java] 디폴트 메소드(default method)  (0) 2020.12.07
[JAVA] 제네릭 클래스, 제네릭 메소드  (0) 2020.11.14
[JAVA]난수 발생(Math.Random())  (0) 2020.11.14
자바 파일 입 출력  (0) 2020.11.14
try-with-resources  (0) 2020.11.14