[JAVA]컬렉션 프레임워크(Collections Framework)
2023. 1. 15. 21:21ㆍJava
1. 컬렉션 프레임워크(Collections Framework)
1-1. 정의
컬렉션 프레임워크란, '데이터 군을 저장하는 클래스들을 표준화한 설계'를 뜻한다.
JDK1.2부터 등장했으며, 컬렉션을 다루는 데 필요한 다양한 컬렉션 클래스들을 제공한다.
더보기
- 컬렉션(Collection) : 다수의 데이터, 데이터 그룹
- 프레임워크(Framework) : 표준화된 프로그래밍
1-2. 컬렉션 프레임워크의 장점
컬렉션 프레임워크의 장점으로는 다음이 있다.
더 많은 장점에 대해서는 Collections Framework Overview에서 확인가능하다.
- 가변적인 저장 공간을 제공(배열의 단점을 보완)
- 배열은 고정적인 저장 공간을 제공하기에 정해진 크기를 넘어가는 데이터를 저장할 수 없다
- 배열은 데이터가 비어있으면 메모리가 낭비된다
- 컬렉션은 데이터가 추가 및 제거될 때 자동적으로 크기가 늘어나고 줄어든다
- 프로그래밍 작업 감소
- 이미 구현된 컬렉션 클래스를 목적에 맞게 선택하여 사용하기만 하면 된다
- 성능 향상
1-3. 구성요소
- 인터페이스(interfaces)
- 각 컬렉션을 나타내는 추상 데이터에 대한 인터페이스(List, Set, Map 등)
- 클래스(classes)
- 컬렉션 별 인터페이스의 구현
- 같은 컬렉션(ex - List)이더라도 목적에 따라 상세 구현(ArrayList, LinkedList, ...)이 달라질 수 있다
- 상세 구현이 다르더라도 일관된 조작법으로 사용가능하다
- 알고리즘(algorithms)
- 컬렉션이 제공하는 연산, 검색, 정렬, 셔플 등에 대한 메서드
2. 컬렉션 인터페이스(Collection Interface)_
2-1. 컬렉션 인터페이스의 구분

컬렉션 인터페이스는 List, Queue, Set, Map 인터페이스로 구성된다.
이 중, List와 Queue, Set의 공통된 부분을 Collection 인터페이스로 정의했다.
Map은 구조상 특징이 달라 Collection 인터페이스를 상속받지 않는다.
더보기
※ 컬렉션 프레임워크의 모든 컬렉션 클래스들은 List, Set, Map 중 하나를 구현한다
∵ Queue는 인터페이스가 존재하나, 직접 구현된 클래스는 존재하지 않는다.
즉, Queue는 LinkedList를 사용하여 구현된다.
2-2. 주요 컬렉션 인터페이스의 특징

2-3. Collection 인터페이스

Collection 인터페이스에는 컬렉션 클래스에 저장된 데이터를 다루는 데 가장 기본적인 메서드들이 정의되어 있다.
더보기
※ 실제로는 Object가 아니라 'E'로 표기되어 있는데, E는 특정 타입을 의미하는 것으로 지네릭스에 의한 표기이다.
지네릭스에 관해서는 후에 정리한다.
2-4. List 인터페이스

특징
- 중복을 허용
- 저장순서가 유지
- 동적 크기를 가지며 배열처럼 사용 가능(LinkedList는 예외로 연결 기반)
메서드

List 구현 클래스
- ArrayList
- LinkedList
- Vector
- Stack
2-5. Queue 인터페이스
특징
- Queue는 기본적으로 한쪽 방향으로만 삽입, 삭제 가능(선입선출(FIFO))
- Deque는 양쪽에서 삽입과 삭제가 동시에 가능
Queue 메서드

Deque 메서드

Queue, Deque 구현 클래스
- LinkedList
- ArrayDeque
- PriorityQueue
2-6. Set 인터페이스

특징
- 중복을 허용하지 않음
- 저장 순서 유지되지 않음(단, LinkedHashSet은 저장 순서 유지)
메서드

Set 구현 클래스
- HashSet
- LinkedHashSet
- TreeSet
2-7. Map 인터페이스

특징
- 키(key)와 값(value)를 하나의 쌍으로 묶어서 저장
- 키는 중복 불가능
- 값은 중복 허용
메서드

Map 구현 클래스
- HashMap
- Hashtable
- TreeMap
- ConcurrentHashMap
참고자료
자바의 정석(3rd Edition) - 도우출판
https://ssdragon.tistory.com/20
https://catsbi.oopy.io/8f0f5192-3a06-405e-8076-dbc5ff9f2dfb
https://hudi.blog/java-collection-framework-1/
'Java' 카테고리의 다른 글
[JAVA] HashMap을 키(key), 값(value) 기준으로 정렬하는 방법 (1) | 2023.01.06 |
---|---|
[JAVA] 객체지향 프로그래밍2 (0) | 2023.01.03 |
[JAVA] 객체지향 프로그래밍 (0) | 2023.01.03 |