BackEnd/Java

[Java] 컬렉션 프레임워크(Collection Framework) 개념

ryuneng 2025. 1. 15. 00:13
반응형

# 목적

: 학습을 위한 컬렉션 프레임워크(Collection Framework) 관련 개념 정리




Collection 이란?

: 여러 객체(데이터)를 모아놓은 것



프레임워크(Framework) 란?

: 다른 사람과 협력하기 위해 표준화, 정형화된 체계적인 프로그래밍 방식
> 생산성이 높아지고 유지보수가 용이함

대표적인 java의 프레임워크 - Spring

* 참고
  Library : 다른 사람이 미리 만들어놓은 기능 제공
  - ex1) 오디오 라이브러리 - 녹음, 재생, 정지 등의 기능 제공
  - ex2) Java API에서 제공하는 SimpleDateFormat(날짜)




컬렉션 프레임워크(Collection Framework) 란?

: Collection(다수의 객체=data)을 다루기 위한 표준화된 프로그래밍 방식

> 컬렉션을 쉽고 편리하게 다룰 수 있는 (저장, 삭제, 검색, 정렬 등)
다양한 클래스를 제공

java.util패키지에 포함. JDK1.2부터 제공





Colletion Framework의 주요 인터페이스

- 대표적으로 List, Set, Map 이 있다.

  순서 중복 특징
List O O 순서가 보장되는 데이터의 집합
Set X X 순서를 유지하지 않는 데이터의 집합
Map X key: X / value: O 키(key)와 값(value)의 쌍으로 이루어진 데이터의 집합



1. List 주요 구현 클래스

1) ArrayList

- 가장 많이 사용하는 List 구현 클래스
(전체 자료구조(Collection) 클래스 중에서도 가장 많이 사용)

- 장점
: 구조가 간단하고 데이터를 읽는 데 걸리는 시간(접근시간, access time)이 짧다.

- 단점
① 크기를 변경할 수 없다.
크기를 변경해야 하는 경우, 새로운 배열을 생성 후 데이터를 복사해야 함.
크기 변경을 피하기 위해 충분히 큰 배열을 생성해두면, 메모리가 낭비됨

② 비순차적인 데이터의 추가, 삭제에 시간이 많이 걸린다.
데이터를 추가하거나 삭제하기 위해 다른 데이터를 옮겨야 함.
그러나 순차적인 데이터 추가(끝에 추가)와 삭제(끝부터 삭제)는 빠름


2) LinkedList

- ArrayList의 단점을 보완 : ArrayList와 달리 링크드 리스트는 불연속적으로 존재하는 데이터를 연결(link)

- 단점 : 데이터 접근성이 나쁨
(각 객체마다 다음 객체 1개와만 연결되어 있음. 2-3개 이상 객체 건너뛰기 불가)

* 참고
① Doubly Linked List
: LinkedList의 단점을 보완하는 이중 연결리스트, 접근성 향상 (앞뒤로 이동)

② Doubly Circular Linked List
: 이중 원형 연결리스트 (앞뒤로 이동 + 맨앞과 맨뒤도 연결되어 있음)

* ArrayList vs LinkedList 성능 비교

컬렉션 읽기(접근시간) 추가/삭제 비고
ArrayList 빠름 느림 순차적인 추가삭제는 더 빠름. 비효율적인 메모리사용
LinkedList 느림 빠름 데이터가 많을수록 접근성이 떨어짐
1. 순차적으로 데이터를 추가/삭제 - ArrayList 우수
2. 비순차적으로 데이터를 추가/삭제 - LinkedList 우수
3. 접근시간(access time) - ArrayList 우수

3) Vector

- ArrayList와 유사한 List구현 클래스(멀티스레드 환경에 안전)
활용 예시) 수식계산, 수식괄호검사, 워드프로세서의 undo/redo, 웹브라우저의 뒤로/앞으로

4) Stack

- LIFO(Last In First Out, 후입선출) 자료구조 구현 클래스 : 가장 나중에 추가한 값이 가장 먼저 인출된다.
활용 예시) 최근사용문서, 인쇄작업 대기목록, 버퍼(Buffer)

* Queue: FIFO(First In First Out, 선입선출) 자료구조 구현 클래스




2. Set 주요 구현 클래스

1) HashSet

- 가장 많이 사용하는 Set 구현 클래스 - 순서X, 중복X
* 순서를 유지하려면 LinkedHashSet 클래스 사용하면 됨

2) TreeSet

- 이진 탐색 트리(binary search tree) : 부모보다 작은 값은 왼쪽, 큰 값은 오른쪽에 저장

- 저장되는 요소가 오름차순으로 정렬되어서 저장됨
- 단점 : 데이터가 많아질수록 추가, 삭제에 시간이 더 걸림(비교 횟수 증가)




3. Map 주요 구현 클래스

1) HashMap

- 가장 많이 사용하는 Map 인터페이스 구현 클래스
- 동기화 제공하지 않음 * HashMap의 구버전인 HashTable은 동기화 o

2) TreeMap

- 범위 검색과 정렬에 유리한 컬렉션 클래스
- HashMap보다 데이터 추가, 삭제에 시간이 더 걸림




배열과 컬렉션의 비교

구분 배열 컬렉션
데이터 기본자료형, 객체 객체
길이 불변 가변적
저장 인덱스필요 맨 마지막요소의 끝에 자동으로 저장
삭제 인덱스필요, 해당부분 데이터가 비어있음 삭제 후 다음요소로 해당 위치가 자동으로 채워짐
Enhanced-for 배열의 끝까지 반복 요소가 있는 부분까지만 반복

* Enhanced-for : 향상된 for문



* 참고 : 유튜브 [자바의 정석 기초]


 


< 해당 글은 velog에서 이전하며 옮겨온 글로, 가독성이 좋지 않을 수 있는 점 양해 부탁드립니다. >

🔗 velog 버전 보기 : https://velog.io/@ryuneng2/Java-Collection-Framework-컬렉션-프레임워크