컬렉션 프레임워크?
컬렉션이란 데이터를 저장하고 처리할 때 재사용 가능하도록 만든 자료구조의 집합입니다.
그리고 프레임워크란 어떤 기능을 완성하기 위하여 전체적인 구조가 갖춰져 있고, 빈 부분을 채워서 넣을 수 있는 것을 의미합니다.
즉, 컬렉션 프레임워크란 여러 개의 데이터를 담아 처리하기 위해 만든 자료구조 껍데기라고 볼 수 있습니다. 개발자에게 다양한 데이터 구조와 알고리즘을 일관된 방식으로 사용할 수 있게 해줍니다.
컬렉션 프레임워크의 종류
자바의 컬렉션 프레임워크는 java.util 패키지에서 사용할 수 있으며, 위의 그림에서와 같이 주요 인터페이스로는 List, Set, Map, 그리고 Queue가 있습니다.
- List: 순서가 있는 데이터의 집합으로 중복값을 허용함
- Set: 순서가 없는 데이터의 집합으로 중복을 허용하지 않음
- Map: 키-값 쌍으로 이루어진 데이터의 집합으로 키는 중복될 수 없고, 값은 중복이 가능
- Queue: FIFO구조로, 먼저 입력된 값이 먼저 나옴
각 인터페이스의 구현 클래스
- List
- ArrayList: 동적 배열로 빠른 조회 가능
- LinkedList: 이중 연결리스트로 빠른 삽입/삭제 가능
- Vector: ArrayList와 유사, thread-safe함(현재는 ArrayList를 주로 사용함)
- Set
- HashSet: 해시 기반 빠른 검색
- LinkedHashSet: HashSet의 기능에 삽입 순서 유지(Set의 구현체이면서 동시에 HashSet을 상속)
- TreeSet: 레드-블랙트리 기반 정렬 상태 유지
- Map
- HashMap: 해시 기반 빠른 검색
- LinkedHashMap: 삽입순서 유지하는 HashMap
- Hashtable: HashMap과 유사, thread-safe함(현재는 HashMap 주로 사용함)
- TreeMap: 레드-블랙트리 기반 키 기준 정렬 상태 유지
- Queue
- PriorityQueue: 우선순위를 두어 요소 정렬
- LinkedList: Queue의 인터페이스 구현체
Map과 Collection의 관계
최상단 그림을 보면 Map은 Collection을 직접적으로 상속하지 않습니다.
오라클 컬렉션 프레임워크 공식문서에서는 Map의 경우 진짜 컬렉션은 아니지만, 컬렉션처럼 조작할 수 있다고 되어 있습니다.
또한, 컬렉션-뷰 오퍼레이션을 제공한다고 되어있습니다. Map에서는 아래와 같은 메소드를 통해 컬렉션-뷰를 제공합니다.
- keySet(): 키의 Set 뷰를 반환
- values(): 값의 컬렉션 뷰 반환
- entrySet(): 키-값 쌍의 Set 뷰 반환
이러한 뷰를 통해 Map의 요소들을 Collection 인터페이스 메소드를 사용할 수 있게 됩니다.
컬렉션 프레임워크의 장점
컬렉션 프레임워크의 가장 큰 필요목적은 요구사항에 따라 필요한 자료구조를 바로 사용할 수 있다는 점입니다.
각 인터페이스는 용도에 따라 최적화된 알고리즘으로 구현되어 있어 높은 성능을 제공하고, 일관된 API 사용으로 재사용성을 높일 수 있습니다.
또한 제네릭을 사용함으로서 타입 안정성을 보장할 수 있습니다.
자료를 일반 배열로 저장하게 되면 선언할 때 크기가 고정되어 변경이 불가능하고 주소값이 연속적이라는 단점이 있는 반면,
컬렉션 프레임워크는 크기가 가변적으로 변경이 가능합니다.
따라서 삽입, 탐색, 정렬등이 유연하게 가능하고, 용도에 따라 연속적/비연속적으로 주소값을 사용하므로 효율적인 메모리 관리가 가능합니다.
'Language > JAVA' 카테고리의 다른 글
자바 가변인자(varargs)와 힙 오염(Heap pollution) (0) | 2024.07.25 |
---|---|
자바 제네릭(Generic) 타입에 대하여 (0) | 2024.07.23 |
String 클래스 파고들기 - 객체의 특성 및 더하기 연산의 버전별 차이 (0) | 2024.04.09 |
String 클래스 파고들기 - String 생성과 byte 변환시 주의점 (0) | 2024.04.05 |
자바가 돌아가는 동작 원리 (0) | 2024.03.06 |
남에게 설명할 때 비로소 자신의 지식이 된다.
포스팅이 도움되셨다면 하트❤️ 또는 구독👍🏻 부탁드립니다!! 잘못된 정보가 있다면 댓글로 알려주세요.