멀티캠퍼스

[2026.04.29] - TIL 23일차 컬렉션(Collection)과 자료구조

buckwheat 2026. 4. 29. 17:40

 

1. 자료구조란?

자료구조는 데이터를 메모리에서 구조적으로 저장하고 처리하는 방법을 말한다.
데이터를 어떤 형태로 저장하고, 어떻게 꺼내고, 어떻게 추가·삭제할지에 대한 방식이라고 볼 수 있다.

자료구조는 크게 선형구조, 비선형구조, 파일구조 등으로 나눌 수 있다.
선형구조에는 리스트, 스택, 큐, 덱이 있고, 비선형구조에는 트리와 그래프가 있다.

 


2. 컬렉션(Collection)이란?

컬렉션은 자바에서 자료구조를 쉽게 사용할 수 있도록 제공하는 프레임워크이다.
추가, 삭제, 검색, 정렬 같은 기능이 이미 구현되어 있기 때문에, 직접 자료구조 알고리즘을 만들지 않아도 된다.
컬렉션은 java.util 패키지에 포함되어 있으며, 인터페이스를 통해 다양한 컬렉션 클래스를 공통된 방식으로 사용할 수 있다.

 


3. 배열의 문제점과 컬렉션의 장점

배열은 한 번 크기를 정하면 바꿀 수 없고, 중간에 데이터를 추가하거나 삭제하는 과정도 불편하다.
또한 한 가지 자료형만 저장할 수 있다는 제한도 있다.

 

반면 컬렉션은 저장 크기에 제약이 거의 없고, 자료의 추가·삭제·정렬이 더 편리하다.
또한 객체를 저장하는 구조이기 때문에 다양한 타입도 관리할 수 있다.
기본 자료형을 저장해야 할 경우에는 Wrapper 클래스를 사용하면 된다.

 


4. 컬렉션의 주요 인터페이스

컬렉션은 크게 List, Set, Map으로 나뉜다.

  • List : 순서를 유지하고 저장하며, 중복 저장 가능
  • Set : 순서를 유지하지 않고 저장하며, 중복 저장 불가
  • Map : 키와 값의 쌍으로 저장하며, 키는 중복 불가

즉, 데이터를 어떤 방식으로 저장하고 싶은지에 따라 사용하는 컬렉션이 달라진다.

 

1) List

List는 데이터를 순서대로 저장하는 구조이다.
인덱스로 관리되기 때문에 배열과 비슷한 느낌으로 사용할 수 있고, 중복된 데이터도 저장할 수 있다.

대표적인 구현 클래스는 ArrayList, Vector, LinkedList가 있다.

  • ArrayList : 가장 많이 사용되는 리스트, 저장 용량이 부족하면 자동으로 늘어남
  • Vector : ArrayList와 비슷하지만 동기화를 지원함
  • LinkedList : 데이터 추가와 삭제가 빈번할 때 유리함

List는 순서가 중요하고, 중복을 허용해야 하는 경우에 적합하다.

또한 List 계열 컬렉션은 객체를 저장한 뒤 정렬해서 사용할 수도 있다. 이때 기본 정렬 기준을 정하려면 Comparable을 사용하고, 다른 기준으로 정렬하려면 Comparator를 사용한다. 수업에서는 ArrayList에 객체를 저장한 뒤 Collections.sort()를 통해 원하는 기준으로 정렬하는 방법도 함께 확인했다.

 

2) Set

Set은 저장 순서를 유지하지 않고, 중복 데이터도 허용하지 않는 구조이다.
같은 객체는 한 번만 저장할 수 있고, null도 하나만 저장할 수 있다.

대표적인 구현 클래스는 HashSet, LinkedHashSet, TreeSet이 있다.

  • HashSet : 중복을 허용하지 않으며 처리 속도가 빠름
  • LinkedHashSet : 추가된 순서를 유지함
  • TreeSet : 정렬된 상태로 저장할 수 있음

Set은 중복을 막고 싶을 때 사용하는 자료구조라고 이해하면 된다.

 

3) Map

Map은 키(key)와 값(value)을 한 쌍으로 저장하는 구조이다.
키는 중복될 수 없고, 값은 중복될 수 있다.
만약 같은 키로 값을 다시 저장하면 기존 값이 덮어씌워진다.

대표적인 구현 클래스는 HashMap, HashTable, TreeMap, Properties가 있다.

  • HashMap : 가장 많이 사용하는 Map 구현 클래스
  • HashTable : 동기화를 지원하는 Map
  • TreeMap : 정렬 기능이 있는 Map
  • Properties : 키와 값을 문자열로 제한한 Map

Map은 이름과 값, 아이디와 정보처럼 짝으로 관리해야 하는 데이터에 적합하다.

 

4) Iterator와 ListIterator

컬렉션에 저장된 요소를 하나씩 꺼내기 위해 사용하는 인터페이스가 Iterator이다.
ListSetiterator() 메소드를 통해 반복자를 얻을 수 있다.

  • hasNext() : 다음 요소가 있는지 확인
  • next() : 다음 요소 가져오기

ListIterator는 Iterator를 확장한 것으로, 양방향 탐색이 가능하다.
즉, 앞으로도 이동할 수 있고 뒤로도 이동할 수 있다.

 

5) Stack / Queue / Deque

Stack

Stack은 후입선출(LIFO) 구조이다.
나중에 들어간 데이터가 먼저 나오는 방식이다.

대표적인 메소드는 다음과 같다.

  • push() : 데이터 넣기
  • peek() : 맨 위 데이터 확인
  • pop() : 맨 위 데이터 꺼내기

브라우저 뒤로가기나 함수 호출 구조를 떠올리면 이해하기 쉽다.

 

Queue

Queue는 선입선출(FIFO) 구조이다.
먼저 들어간 데이터가 먼저 나오는 방식이다.

대표적인 메소드는 다음과 같다.

  • offer() : 데이터 넣기
  • peek() : 맨 앞 데이터 확인
  • poll() : 맨 앞 데이터 꺼내기

작업 대기열이나 메시지 처리 구조가 Queue 방식과 비슷하다.

 

Deque

Deque는 큐와 스택의 성질을 모두 가진 자료구조이다.
앞과 뒤에서 모두 데이터를 넣고 뺄 수 있다.

즉, 한쪽만 사용하는 것이 아니라 양쪽 끝을 모두 활용할 수 있는 구조라고 보면 된다.

 

6) TreeSet과 TreeMap

TreeSet과 TreeMap은 이진 트리 구조를 기반으로 동작하는 컬렉션이다.
검색과 정렬 기능이 강화된 구조이며, 데이터를 일정한 순서로 관리할 수 있다는 특징이 있다.

  • TreeSet : 정렬 기능이 있는 Set
  • TreeMap : 정렬 기능이 있는 Map

 

5. 정리

이번 내용은 자바에서 자료구조를 어떻게 다루는지 배우는 과정이라고 볼 수 있다.
자료구조는 데이터를 구조적으로 저장하고 처리하는 방법이고, 자바에서는 이를 컬렉션 프레임워크를 통해 쉽게 사용할 수 있다.

정리하면 다음과 같다.

  • List : 순서 유지, 중복 허용
  • Set : 순서 유지 안 함, 중복 불가
  • Map : 키와 값의 쌍으로 저장
  • Stack : 후입선출
  • Queue : 선입선출
  • Deque : 양쪽에서 넣고 뺄 수 있는 구조