-
[JAVA] 컬렉션 프레임워크 (Collection Framework)Java 2024. 5. 12. 03:37
컬렉션(Collection)
- 여러 객체(데이터)를 담을 수 있는 자료구조, 다수의 데이터 그룹 또는 집합을 의미한다.
프레임워크(Framework)
- 복잡하게 설명할 수 있지만 간단하게 표준화된 프로그래밍 방식을 의미한다.
컬렉션 프레임워크 (Collection Framework)
- 켈렉션 프레임워크란 데이터 그룹을 지정하는 클래스들을 표준화한 설계이다.
- 컬렉션 프레임워크를 활용하면 객체 지향적이고 재사용성이 높은 코드를 작성할 수 있다.
- JDK 1.2버전 부터 java.util 패키지에서 지원하기 시작하였고 이전에는 Vector, Properties, Stack, Hash Tables, Dictionary와 같은 것들이 존재하였으나 통일성이 없고 표준화된 인터페이스가 존재하지 않았다
CollectionFramework의 상속계층도
- 컬렉션 프레임워크의 주요 인터페이스로 List, Set, Map이 있다.
- List와 Set은 공통된 부분이 많아 둘의 공통 메서드만 모아서 새로운 인터페이스인 컬렉션으로 정의한다.
- Map은 List와 Set와 달리 키와 값을 쌍으로 관리하는 구조라서 독립된 인터페이스이다.
- 따라서 위 상속계층도 포함되지 못한다.
인터페이스의 특징과 구현 클래스
인터페이스 특징 구현 클래스 List 순서 유지, 저장, 중복 저장 O ArrayList, Vector, Stack, LinkedList 등 Set 순서 유지, 저장, 중복 저장 X HashSet, TreeSet 등 Map 키와 값을 쌍으로 저장, 순서 유지 X, 키 중복 저장 X HashMap, Hashtable, TreeMap, Properties 등
리스트 (List)
- 순서가 있는 데이터 집합으로 데이터 중복을 허용한다.
ArrayList
- 배열을 이용하여 만든 리스트로 대표적인 컬렉션 클래스이다.
- 기본 크기는 10이지만 원소가 늘어나면 더 큰 배열에 옮긴다.
- 특정 원소 조회수가 많은경우 사용하는 것이 좋다.
- 단반향 포인터 구조로 인덱스로 조회가 가능하다 때문에 인덱스만 안다면 빠르게 조회가 가능하디.
LinkedList
- 노드와 포인트를 이용하여 만든 리스트이다.
- 특정 원소를 조회하는 경우 첫 노드부터 순화해야 하기 때문에 ArrayList에 비해 느리다.
- 조회보다 삽입, 삭제가 많은 경우 사용하는 것이 좋다.
- 양방향 포인터 구조로 삽입, 삭제 시 포인터를 끊고 새로운 노드에 연결만 하면 됨으로 빠르다.
- 스택, 큐, 양방향 큐등을 만들기 위한 용도로 쓰인다.
Vector
- ArrayList와 비슷하게 배열로 만들어진 리스트로 과거의 대용량 처리를 위해 사용하였다.
- thread-safe 하다는 특징을 가지고 있어 비교적 성능이 좋지 않고 무거워 잘 쓰이지 않는다.
Stack
- LIFO(Last-In-First_Out) 특성을 가지는 자료구조이다.
- 들어올 때 Push, 나갈 때는 Pop이라는 용어를 사용한다.
큐 (Queue)
- 처음 들어온 원소가 처음으로 나간다는 FIFO(First-In-First-Out)이라는 특징을 가진다.
PriorityQueue
- 우선순위를 가지는 큐로 들어온 순서가 아닌 부여된 우선순위에 따라 높은 순으로 먼저 반환한다.
Deque
- 양쪽으로 넣고 빼는 것이 가능한 큐 자료구조이다.
집합 (Set)
- 순서가 없는 데이터 집합으로 데이터 중복을 허용하지 않는다.
HashSet
- 가장 빠른 임의 접근 속도를 가진다.
- 객체를 저장하기 전에 먼저 객체의 hashCode() 메서드를 호출하고 같다면 equals()로 두 객체를 비교하여 동등성을 판단한다.
LinkedHashSet
- 중복을 허용하진 않지만 순서를 가진다.
TreeSet
- 중복을 허용하지 않고 순서도 없다. 그러나 정렬이 되어있다.
- 이진트리를 기반으로한 Set 컬렉션이다.
맵(Map)
- Key-Value 쌍으로 이루어진 데이터의 집합으로 순서는 유지되지 않으며 키(Key)의 중복을 허용하지 않으나 값(Value)의 중복은 허용한다.
HashMap
- HashMap과 동일한 특징을 가지지만 thread-safe 하여 동기화를 지원한다.
- get(), put(), remove() 등에 sycronized라는 키워드가 붙어있다.
LinkedHashMap
- 들어온 순서대로 순서를 가지는 Map이다.
TreeMap
- 키를 기준으로 정렬이 되어 저장되는 Map이다.
- 이진트리를 기반으로 한 Map이다. 부모 키값을 비교하여 낮은 건 왼쪽 높은 건 오른쪽에 Map.Entry를 저장한다.
- 저장시간이 다른 자료 구조에 비해 오래 걸린다.
Summary
- 컬렉션 프레임워크란 데이터 그룹을 저장하는 클래스들을 표준화한 설계이다.
- 컬렉션 인터페이스는 List, Queue, Set으로 구성되며
- 추가로 Map도 컬렉션 인터페이스를 상속받고 있지 않지만 컬렉션으로 분류된다.
- List : 순서가 있는 데이터 집합으로 데이터 중복을 허용한다.
- Queue : 처음 들어온 원소가 처음으로 나간다는 FIFO(First-In-First-Out)이라는 특징을 가진다.
- Set : 순서가 없는 데이터 집합으로 데이터 중복을 허용하지 않는다.
- Map : Key-Value 쌍으로 이루어진 데이터의 집합으로 순서는 유지되지 않으며 키(Key)의 중복을 허용하지 않으나 값(Value)의 중복은 허용된다.
'Java' 카테고리의 다른 글
[JAVA] 생성자, Getter&Setter, Builder (0) 2024.05.16 [JAVA] Wrapper Class (래퍼 클래스) (0) 2024.05.13 [JAVA] 오버라이딩 (Overriding), 오버로딩 (Overloading) 개념 및 차이점 (0) 2024.05.12 [JAVA] 추상 클래스와 인터페이스의 개념 및 차이 (0) 2024.05.08 [JAVA] 클래스, 객체, 인스턴스의 개념 및 차이점 (0) 2024.05.03