자바 컬렉션 프레임워크란?
애플리케이션을 개발하다 보면 다수의 객체를 저장해두고 필요할 때마다 꺼내서 사용해야되는 경우가 발생하는데 이런 경우 가장 간단한 방법은 자바의 배열을 이용하는 것이다.
배열은 쉽게 생성하고 사용할 수 있는 반면 저장할 수 있는 객체 수가 배열을 생성할 때 결정되기 때문에 불특정 다수의 객체를 저장하는데 문제가 생길 수 있다. 또한 데이터를 삭제하게 되면 해당 인덱스의 데이터는 비어있게 되어 메모리가 낭비되는 등 여러 문제가 발생할 수 있다.
자바는 JDK 1.2 버전부터 이러한 문제를 해결하기 위해 자료구조(Data Structure)를 바탕으로 객체들을 효율적으로 추가, 삭제, 검색할 수 있도록 java.util 패키지에 컬렉션과 관련된 인터페이스와 클래스들을 포함시켜놓았다.
이들을 총칭하여 컬렉션 프레임워크(Collection Framewrk)라 한다.
컬렉션 프레임워크는 다수의 요소를 하나의 그룹으로 묶어 효율적으로 저장하고 관리할 수 있는 기능을 제공하는 일종의 컨테이너다.
자바 컬렉션 프레임워크는 몇 가지 인터페이스를 통해서 다양한 컬렉션 클래스를 이용할 수 있도록 하였으며, 대표적인 인터페이스로는 아래와 같다.
Java 컬렉션 클래스의 두가지 주요 루트 인터페이스는 Collection 인터페이스(java.util.Collection)과 Map 인터페이스(java.util.Map) 이다.
유지보수를 쉽게 만들어 주는 컬렉션 프레임워크 장점
- List, Queue, Set, Map등의 인터페이스를 제공하고 이를 구현하는 클래스를 제공하여 일관된 API를 사용할 수 있다.
- 가변적인 저장 공간을 제공한다.
- 자료구조, 알고리즘을 구현하기 위한 코드를 직접 작성할 필요 없이, 이미 구현된 컬렉션 클래스를 목적에 맞게 선택하여 사용하면 된다.
- 제공되는 API 코드는 검증되어있으며, 고도로 최적화 되어있다.
컬렉션 프레임워크 구성 요소
- 인터페이스(Interface) : 각 컬렉션을 나타내는 추상 데이터에 대한 인터페이스(List, Set, Map 등)로 클래스는 이 인터페이스를 상속받아 구현되었으므로 상세한 동작은 달라도 일관된 조작법으로 사용이 가능
- 클래스(class) : 컬렉션 별 인터페이스의 상세 구현(Implementation)한 것으로 예를들어 List 인터페이스로 사용 가능한 클래스는 ArrayList, Vector, linkedList가 있다.
- 알고리즘 : 컬렉션이 제공하는 연산, 검색, 정렬, 셔플등에 대한 메소드
자료구조(Data Structure)의 분류
자료구조의 여러 분류법 가운데, 대표적으로 많이 분류되는 방법은 선형 자료구조(Linear Data Structure)과 비선형 자료구조(NonLinear Data Structure)로 나눌 수 있다.
이러한 분류를 보통 "형태에 따른 자료구조" 라고 보게 되며, 각 자료구조에 알맞게 구체화된 것을 "구현된 자료구조"라고 한다.
선형 자료구조란 ?
데이터가 일렬로 연결된 형태를 말하며, 우리가 흔히 사용하는 int[] 배열같은 것을 예시로 들 수 있다.
선형 자료구조는 대표적으로 리스트(List), 큐(Queue), 덱(Deque)이 있다.
비선형 자료구조란?
선형구조의 반대로 각 요소가 여러개의 요소와 연결된 형태(마치 거미줄처럼)를 생각하면 된다.
비선형 자료구조는 대표적으로 그래프(Graph), 트리(Tree)가 있다.
이 두가지에 포함되지 않는 자료구조 중에 집합(Set)도 있다. 이런 경우 보통 기타 자료구조 또는 집합 자료구조라고 말하며, 집합의 경우에는 데이터가 연결된 형식이 아닌 table에 가까운 자료구조로 볼 수 있다.
Java Collection Framework 종류
[1] Collection 인터페이스
(1) List
- 순서를 유지하고 저장
- 중복 저장이 가능
- 구현 클래스 : ArrayList, Vector, LinkedList
(2) Set
- 순서를 유지하지 않고 저장
- 중복 저장 안됨
- 구현 클래스 : HashSet, LinkedHashSet, TreeSet
(3) Queue
- 데이터가 저장된 순서대로 출력되는 선입선출(FIFO : First In First Out)의 구조를 갖는 선형 자료구조
- 인터페이스는 존재하지만 직접 구현된 클래스는 존재하지 않음
→ 따라서 Queue를 구현하려면 LinkedList를 사용하여 구현할 필요가 있다.
[2] Map 인터페이스
- Key-Value 쌍으로 데이터 저장
- 키는 중복 저장 안됨
- 구현 클래스 : HashMap, HashTable, TreeMap
'자바(JAVA) > 기본 문법' 카테고리의 다른 글
자바 ArrayList 중복 제거 방법 (0) | 2023.07.09 |
---|---|
Java NumberFormatException 에러(백준 문제) 해결 (0) | 2023.04.21 |
Set Collection in Java (0) | 2023.04.01 |
List 컬렉션(ArrayList vs LinkedList) (0) | 2023.03.31 |
JAVA 자바 메모리 구조(Runtime Data Area) (0) | 2023.01.28 |