[Java 개념노트 47] 컬렉션 프레임워크란 무엇인가?
안녕하세요. Java 개념노트 시리즈 마흔일곱 번째 글입니다.
지난 글에서는 직접 예외 클래스를 만들어 사용하는 사용자 정의 예외에 대해 정리했습니다. 이번 글에서는 자바에서 여러 데이터를 더 편리하게 저장하고 관리할 수 있게 해주는 컬렉션 프레임워크에 대해 알아보겠습니다.
지금까지 여러 값을 저장할 때 배열을 사용했습니다. 하지만 배열은 한 번 크기가 정해지면 길이를 바꾸기 어렵고, 값을 추가하거나 삭제하는 작업도 불편합니다. 이런 한계를 보완하기 위해 자바에서는 List, Set, Map 같은 컬렉션을 제공합니다.
1. 컬렉션 프레임워크란?
컬렉션 프레임워크는 여러 데이터를 저장하고 관리하기 위해 자바에서 제공하는 클래스와 인터페이스의 모음입니다.
여기서 컬렉션은 여러 값을 담는 자료구조를 의미합니다. 프레임워크는 자주 사용하는 구조와 기능을 미리 정리해둔 틀이라고 생각하면 됩니다.
쉽게 말하면
컬렉션 프레임워크는 여러 데이터를 배열보다 더 편하게 저장, 추가, 삭제, 검색할 수 있게 해주는 자바의 자료 관리 도구입니다.
2. 배열의 한계
배열은 여러 값을 저장할 수 있지만 몇 가지 불편한 점이 있습니다.
String[] names = new String[3];
names[0] = "Java";
names[1] = "Spring";
names[2] = "SQL";
위 배열은 길이가 3입니다. 값을 4개 넣고 싶어도 배열의 크기는 자동으로 늘어나지 않습니다.
names[3] = "Oracle"; // 오류 발생 가능
배열은 인덱스로 접근하기에는 빠르고 단순하지만, 데이터 개수가 계속 변하는 상황에서는 불편할 수 있습니다.
3. 컬렉션을 사용하는 이유
컬렉션을 사용하면 배열보다 데이터를 더 유연하게 다룰 수 있습니다.
- 데이터를 쉽게 추가할 수 있습니다.
- 데이터를 쉽게 삭제할 수 있습니다.
- 저장된 데이터 개수를 쉽게 확인할 수 있습니다.
- 특정 값이 포함되어 있는지 확인할 수 있습니다.
- 목적에 따라 List, Set, Map을 선택할 수 있습니다.
배열은 크기를 먼저 정해야 하지만, 컬렉션은 데이터를 넣고 빼는 작업이 더 편리합니다.
4. 컬렉션 프레임워크의 대표 구조
자바 컬렉션 프레임워크에서 자주 만나는 대표 구조는 List, Set, Map입니다.
| 구분 | 특징 | 대표 구현 클래스 |
List |
순서가 있고 중복을 허용합니다. | ArrayList |
Set |
중복을 허용하지 않습니다. | HashSet |
Map |
key와 value를 한 쌍으로 저장합니다. | HashMap |
핵심 포인트
순서와 중복이 중요하면 List, 중복 제거가 중요하면 Set, 이름표처럼 key로 값을 찾고 싶으면 Map을 생각하면 됩니다.
5. List란?
List는 데이터를 순서대로 저장하는 구조입니다. 저장한 순서가 유지되고, 같은 값을 여러 번 저장할 수 있습니다.
List 특징
1. 저장 순서가 있다.
2. 중복 값을 허용한다.
3. 인덱스로 값에 접근할 수 있다.
예를 들어 사용자가 입력한 검색어 목록, 게시글 목록, 상품 목록처럼 순서가 필요한 데이터에 사용할 수 있습니다.
6. ArrayList 맛보기
ArrayList는 List의 대표적인 구현 클래스입니다. 사용하려면 java.util.ArrayList를 import해야 합니다.
import java.util.ArrayList;
public class Main {
public static void main(String[] args) {
ArrayList<String> names = new ArrayList<>();
names.add("Java");
names.add("Spring");
names.add("Java");
System.out.println(names);
}
}
실행 결과는 다음과 같습니다.
[Java, Spring, Java]
ArrayList는 순서를 유지하고 중복도 허용하기 때문에 "Java"가 두 번 저장되었습니다.
7. Set이란?
Set은 중복을 허용하지 않는 구조입니다. 같은 값을 여러 번 넣어도 하나만 저장됩니다.
Set 특징
1. 중복 값을 허용하지 않는다.
2. 값의 존재 여부를 확인하기 좋다.
3. 일반적으로 저장 순서를 보장하지 않을 수 있다.
예를 들어 중복 없는 태그 목록, 중복 없는 아이디 목록, 이미 방문한 값 저장 등에 사용할 수 있습니다.
8. HashSet 맛보기
HashSet은 Set의 대표적인 구현 클래스입니다. 사용하려면 java.util.HashSet을 import해야 합니다.
import java.util.HashSet;
public class Main {
public static void main(String[] args) {
HashSet<String> tags = new HashSet<>();
tags.add("Java");
tags.add("Spring");
tags.add("Java");
System.out.println(tags);
}
}
실행 결과는 다음과 비슷합니다.
[Java, Spring]
"Java"를 두 번 추가했지만 Set은 중복을 허용하지 않기 때문에 하나만 저장됩니다. 출력 순서는 실행 환경에 따라 다르게 보일 수 있습니다.
9. Map이란?
Map은 key와 value를 한 쌍으로 저장하는 구조입니다.
배열이나 List가 인덱스로 값을 찾는 구조라면, Map은 key를 사용해서 value를 찾습니다.
Map 구조
key value
----------------
id user01
name 건
role admin
Map에서는 key가 중복될 수 없습니다. 같은 key로 값을 다시 넣으면 기존 값이 바뀔 수 있습니다.
10. HashMap 맛보기
HashMap은 Map의 대표적인 구현 클래스입니다. 사용하려면 java.util.HashMap을 import해야 합니다.
import java.util.HashMap;
public class Main {
public static void main(String[] args) {
HashMap<String, String> member = new HashMap<>();
member.put("id", "user01");
member.put("name", "건");
member.put("role", "admin");
System.out.println(member.get("id"));
System.out.println(member.get("name"));
System.out.println(member.get("role"));
}
}
실행 결과는 다음과 같습니다.
user01
건
admin
put()으로 key와 value를 저장하고, get()으로 key에 해당하는 값을 꺼냈습니다.
11. List, Set, Map 비교하기
세 구조를 비교하면 다음과 같습니다.
| 구분 | 저장 방식 | 중복 | 순서 | 대표 사용 |
List |
값을 순서대로 저장 | 허용 | 유지 | 목록, 게시글, 상품 리스트 |
Set |
중복 없는 값 저장 | 허용하지 않음 | 보장하지 않을 수 있음 | 태그, 중복 제거, 고유값 |
Map |
key-value 한 쌍 저장 | key 중복 불가 | 보장하지 않을 수 있음 | 회원정보, 설정값, 검색용 데이터 |
12. 컬렉션과 제네릭
컬렉션을 사용할 때는 보통 제네릭을 함께 사용합니다. 제네릭은 컬렉션에 어떤 타입의 데이터를 저장할지 정하는 문법입니다.
ArrayList<String> names = new ArrayList<>();
HashSet<Integer> numbers = new HashSet<>();
HashMap<String, Integer> scores = new HashMap<>();
위 코드의 의미는 다음과 같습니다.
| 코드 | 의미 |
ArrayList<String> |
문자열만 저장하는 ArrayList |
HashSet<Integer> |
정수 객체만 저장하는 HashSet |
HashMap<String, Integer> |
String key와 Integer value를 저장하는 HashMap |
주의
컬렉션의 제네릭 타입에는 기본 자료형을 직접 사용할 수 없습니다. int 대신 Integer, double 대신 Double처럼 Wrapper 클래스를 사용합니다.
13. ArrayList<int>는 왜 안 될까?
컬렉션은 객체를 저장하는 구조입니다. 그래서 기본 자료형인 int를 제네릭 타입으로 직접 사용할 수 없습니다.
잘못된 예
// ArrayList<int> numbers = new ArrayList<>(); // 오류 발생
올바른 예
ArrayList<Integer> numbers = new ArrayList<>();
기본 자료형을 컬렉션에 넣고 싶다면 Wrapper 클래스를 사용해야 합니다.
14. 컬렉션에서 자주 쓰는 메서드
컬렉션마다 메서드가 조금씩 다르지만, 자주 만나는 기본 메서드는 다음과 같습니다.
| 메서드 | 역할 | 주로 사용되는 곳 |
add() |
값 추가 | List, Set |
remove() |
값 삭제 | List, Set, Map |
size() |
저장된 개수 확인 | List, Set, Map |
contains() |
값 포함 여부 확인 | List, Set |
put() |
key-value 저장 | Map |
get() |
값 꺼내기 | List, Map |
15. List 기본 메서드 맛보기
ArrayList에서 값을 추가하고 꺼내는 간단한 예제입니다.
import java.util.ArrayList;
public class Main {
public static void main(String[] args) {
ArrayList<String> list = new ArrayList<>();
list.add("Java");
list.add("Spring");
list.add("SQL");
System.out.println(list.size());
System.out.println(list.get(0));
System.out.println(list.contains("Java"));
list.remove("SQL");
System.out.println(list);
}
}
실행 결과는 다음과 같습니다.
3
Java
true
[Java, Spring]
16. Set 기본 메서드 맛보기
HashSet에서 중복이 제거되는 흐름을 보겠습니다.
import java.util.HashSet;
public class Main {
public static void main(String[] args) {
HashSet<String> set = new HashSet<>();
set.add("Java");
set.add("Spring");
set.add("Java");
System.out.println(set.size());
System.out.println(set.contains("Java"));
set.remove("Spring");
System.out.println(set);
}
}
실행 결과는 다음과 비슷합니다.
2
true
[Java]
"Java"를 두 번 넣었지만 Set은 중복을 허용하지 않기 때문에 개수는 2입니다.
17. Map 기본 메서드 맛보기
HashMap에서 key와 value를 저장하고 꺼내보겠습니다.
import java.util.HashMap;
public class Main {
public static void main(String[] args) {
HashMap<String, Integer> scores = new HashMap<>();
scores.put("Java", 90);
scores.put("Spring", 85);
scores.put("SQL", 80);
System.out.println(scores.get("Java"));
System.out.println(scores.containsKey("Spring"));
System.out.println(scores.size());
scores.remove("SQL");
System.out.println(scores);
}
}
실행 결과는 다음과 비슷합니다.
90
true
3
{Java=90, Spring=85}
Map에서는 put()으로 저장하고 get(key)로 값을 꺼냅니다.
18. 컬렉션을 선택하는 기준
처음에는 어떤 컬렉션을 써야 할지 헷갈릴 수 있습니다. 아래 기준으로 생각하면 좋습니다.
| 원하는 상황 | 추천 구조 | 이유 |
| 저장 순서가 중요하다 | List |
입력한 순서를 유지합니다. |
| 중복 값을 허용해야 한다 | List |
같은 값을 여러 번 저장할 수 있습니다. |
| 중복을 제거하고 싶다 | Set |
같은 값은 하나만 저장합니다. |
| key로 값을 찾고 싶다 | Map |
key-value 구조로 저장합니다. |
| 회원 아이디로 회원 정보를 찾고 싶다 | Map |
아이디를 key로 사용할 수 있습니다. |
19. 컬렉션 전체 예제
이번에는 List, Set, Map을 한 번에 사용하는 예제를 보겠습니다.
import java.util.ArrayList;
import java.util.HashSet;
import java.util.HashMap;
public class Main {
public static void main(String[] args) {
ArrayList<String> subjects = new ArrayList<>();
subjects.add("Java");
subjects.add("Spring");
subjects.add("Java");
HashSet<String> uniqueSubjects = new HashSet<>();
uniqueSubjects.add("Java");
uniqueSubjects.add("Spring");
uniqueSubjects.add("Java");
HashMap<String, Integer> scores = new HashMap<>();
scores.put("Java", 90);
scores.put("Spring", 85);
System.out.println("List: " + subjects);
System.out.println("Set: " + uniqueSubjects);
System.out.println("Map Java 점수: " + scores.get("Java"));
}
}
실행 결과는 다음과 비슷합니다.
List: [Java, Spring, Java]
Set: [Java, Spring]
Map Java 점수: 90
List는 중복된 Java를 그대로 저장했습니다. Set은 중복을 제거했습니다. Map은 Java라는 key로 점수 90을 꺼냈습니다.
20. 컬렉션 사용 시 자주 하는 실수
컬렉션을 처음 배울 때는 아래와 같은 실수를 자주 합니다.
| 실수 | 문제점 | 해결 방법 |
| import 누락 | ArrayList, HashSet, HashMap을 찾지 못함 | java.util 패키지 import |
ArrayList<int> 사용 |
기본 자료형은 제네릭에 직접 사용 불가 | ArrayList<Integer> 사용 |
| Set에 넣었는데 순서가 유지된다고 생각 | HashSet은 순서를 보장하지 않을 수 있음 | 순서가 필요하면 List 사용 |
| Map에서 없는 key를 get | null이 나올 수 있음 |
containsKey()로 확인 가능 |
| List, Set, Map 선택 기준을 혼동 | 데이터 목적과 맞지 않는 구조 사용 | 순서, 중복, key-value 필요 여부 확인 |
21. 직접 연습해보기
아래 코드를 직접 작성하고 실행해보세요.
import java.util.ArrayList;
import java.util.HashSet;
import java.util.HashMap;
public class Main {
public static void main(String[] args) {
ArrayList<String> menuList = new ArrayList<>();
menuList.add("김밥");
menuList.add("라면");
menuList.add("김밥");
menuList.add("돈가스");
System.out.println("메뉴 목록: " + menuList);
System.out.println("메뉴 개수: " + menuList.size());
HashSet<String> uniqueMenus = new HashSet<>();
uniqueMenus.add("김밥");
uniqueMenus.add("라면");
uniqueMenus.add("김밥");
uniqueMenus.add("돈가스");
System.out.println("중복 제거 메뉴: " + uniqueMenus);
HashMap<String, Integer> priceMap = new HashMap<>();
priceMap.put("김밥", 3500);
priceMap.put("라면", 4500);
priceMap.put("돈가스", 9000);
System.out.println("김밥 가격: " + priceMap.get("김밥"));
System.out.println("라면 포함 여부: " + priceMap.containsKey("라면"));
}
}
실행 결과는 다음과 비슷합니다.
메뉴 목록: [김밥, 라면, 김밥, 돈가스]
메뉴 개수: 4
중복 제거 메뉴: [김밥, 라면, 돈가스]
김밥 가격: 3500
라면 포함 여부: true
HashSet의 출력 순서는 실행 환경에 따라 다르게 보일 수 있습니다. 중요한 점은 중복된 김밥이 하나만 저장된다는 것입니다.
22. 이번 글 정리
이번 글에서는 여러 데이터를 편리하게 저장하고 관리하는 컬렉션 프레임워크에 대해 정리했습니다. 핵심 내용은 다음과 같습니다.
- 컬렉션 프레임워크는 여러 데이터를 저장하고 관리하기 위한 클래스와 인터페이스의 모음이다.
- 배열은 크기가 고정되어 있어 데이터 추가와 삭제가 불편할 수 있다.
- 컬렉션은 데이터 추가, 삭제, 검색, 개수 확인을 편리하게 처리할 수 있다.
List는 순서가 있고 중복을 허용한다.ArrayList는 List의 대표 구현 클래스이다.Set은 중복을 허용하지 않는다.HashSet은 Set의 대표 구현 클래스이다.Map은 key와 value를 한 쌍으로 저장한다.HashMap은 Map의 대표 구현 클래스이다.- 컬렉션은 제네릭과 함께 사용해서 저장할 데이터 타입을 정한다.
- 컬렉션의 제네릭에는 기본 자료형 대신 Wrapper 클래스를 사용한다.
- 순서가 필요하면 List, 중복 제거가 필요하면 Set, key로 값을 찾고 싶으면 Map을 고려한다.
한 줄 요약
컬렉션 프레임워크는 여러 데이터를 배열보다 유연하게 저장하고 관리하기 위한 자바의 자료구조 도구이며, 대표적으로 List, Set, Map이 있습니다.
다음 글 예고
다음 글에서는 [Java 개념노트 48] List와 ArrayList 이해하기라는 주제로 순서가 있는 데이터 목록을 다루는 방법을 자세히 정리해보겠습니다.
GWDEVELBlog Java 개념노트 시리즈

'Computer Science > Java' 카테고리의 다른 글
| [Java] 개념노트 49 Set과 HashSet 이해하기 (0) | 2026.06.16 |
|---|---|
| [Java ] 개념노트 48 List와 ArrayList 이해하기 (0) | 2026.06.16 |
| [Java ] 개념노트 46 사용자 정의 예외 이해하기 (0) | 2026.06.16 |
| [Java] 개념노트 45 throws와 throw 이해하기 (0) | 2026.06.16 |
| [Java] 개념노트 44 예외 처리란 무엇인가? (0) | 2026.06.15 |