컬렉션 프레임워크란?
컬렉션 프레임워크는 자바 프로그래밍에서 중요한 요소 중 하나이다.
자주 사용하는 다양한 자료구조를 자바에서 쉽게 사용할 수 있도록 구현한 *이름 그대로 모음집*, 즉 컬렉션이라고 생각하면 된다.
컬렉션 프레임워크가 왜 생겨났을까?
JDK 1.2 이전에는 Vector
, Properties
, Stack
, HashTable
, Dictionary
와 같은 클래스를 사용했는데 이들은 각각 사용법에 대한 통일성이 없었기 때문에 다루기 어려웠다.
자바는 *다형성*을 활용해 보다 통일된 사용법으로 다양한 자료구조를 제공하고자 컬렉션 프레임워크를 만들었다.
컬렉션 프레임워크가 도입되면서 데이터 삽입, 탐색, 정렬 등 편리한 API를 제공받아 사용할 수 있게 되었다.
구조도
언제 무엇을 사용하는게 적합할까?
본 포스팅에서는 List, Set, Map 등의 API에 대한 기본적인 사용법보다는 언제 어떤 자료구조를 선택해야 좋을지 알아보고자 한다.
ArrayList
- 리스트 자료구조가 필요하다면 기본적으로 선택
- 임의의 요소에 대한 접근성이 뛰어남
- 순차적인 요소의 추가, 삭제가 제일 빠름
- 임의의 요소에 대한 추가, 삭제가 느림
LinkedList
- 임의의 요소에 대한 추가, 삭제가 ArrayList 보다 유리
- 대신 임의의 요소에 대한 접근성이 좋지 않음
HashSet, HashMap
- 해싱을 이용하기 떄문에 임의의 요소에 대한 추가, 삭제, 검색, 접근성 모두 뛰어남
- 검색에 있어서 최고의 성능을 보임 ->
get()
메서드의 성능이 시간 복잡도 O(1)
ArrayDeque
- 스택으로 사용할 때는 Stack보다 빠름
- 대기열로 사용할 때는 LinkedList보다 빠름
- 따라서 Stack, Queue가 필요하다면 ArrayDeque를 사용하는 것이 권장됨 (공식 문서에서 이야기함)
- 하지만 Thread-safe 하지 않기때문에, 멀티스레드 환경에서는
synchronized
를 이용해 ArrayDeque를 구현해야한다.
출처
'Java' 카테고리의 다른 글
[Java] 자바 가상 머신(JVM) 의 내부 구조 (1) | 2024.01.12 |
---|---|
[Java] 제네릭(Generics) (0) | 2024.01.02 |
[Java] Stream API (1) | 2023.12.21 |
[Java] 함수형 인터페이스(Functional Interface)와 람다식(Lambda Expression) (0) | 2023.12.14 |
[Java] 추상 클래스와 인터페이스 (0) | 2023.05.30 |