
컬렉션이란 ?
- 아주 쉽게 말하자면 이름에서도 엿볼 수 있듯 , 데이터 묶음(컬렉션) 이다.
- 즉, 자료구조이자 더 쉽게 이해하자면 동적인 배열 정도로 이해하면 와닿을 것 같다.
- 컬렉션을 통해 데이터 저장, 조회, 삭제, 정렬 등 다양한 기능을 간편하게 구현할 수 있다.
- 배열과 다르게 컬렉션은 길이를 동적으로 변경할 수 있다.(추가 삭제 시 유연하게 길이가 변경.)
컬렉션 프레임워크란 ?

- 자바 컬렉션 프레임워크는 이러한 자료구조들을 쉽게 사용할 수 있도록 인터페이스와 구현체(
ArrayList
,HashSet
,HashMap
등)를 제공하는 집합이다.
❓ 왜 배열이 아니라 컬렉션을 사용해야할까 ?

배열의 한계 때문이다.
- 배열 선언 시 크기가 고정되어 있다.
- 크기 확장(또는 삽입)이 불편하다. 더 큰 크기의 배열을 선언하고 배열을 복사하여 써야한다.
- 크기를 변경할 수 없기 때문에 중간에 데이터를 삭제하면 데이터 낭비의 문제로 이어진다.
배열 사용 예시
// 배열은 선언과 동시에 길이가 정해짐
int[] numbers = new int[3];
numbers[0] = 10;
numbers[1] = 20;
numbers[2] = 30;
// 배열의 정적인 특징의 한계
numbers[3] = 40; // ❌ 요소 추가시 에러발생
코드로 살펴보면 다음과 같다. 이러한 배열의 한계를 극복하기 위해 동적인 자료구조인 클래스가 등장하였다.
컬렉션 사용 예시
컬렉션객체<자료형> 변수이름 = new 컬렉션객체<자료형>();
// 객체<다룰 데이터: 정수> 변수이름 = new 컬렉션객체생성자<정수>();
ArrayList<Integer> arrayList = new ArrayList<Integer>();
// 컬렉션
ArrayList<Integer> arrayList = new ArrayList<>();
arrayList.add(10);
arrayList.add(20);
arrayList.add(30);
arrayList.add(40); // ✅ 정상 동작 (길이 제한 없음)
- 배열과 다르게 컬렉션은 길이를 동적으로 변경할 수 있다.(추가 삭제 시 유연하게 길이가 변경.)
컬렉션의 종류와 특징
인터페이스 | 특징 | 구현체 |
---|---|---|
List |
순서 유지, 중복 허용 | ArrayList |
Set |
순서 없음, 중복 불가 | HashSet |
Map |
키-값 구조, 키 중복 불가 | HashMap |
List 인터페이스를 구현한 ArrayList
ArrayList
는 요소의 순서를 유지하고 중복된 값을 저장할 수 있는 자료구조- 요소 추가 →
add("값")
- 요소 조회 →
get(인덱스)
- 요소 제거 →
remove("값")
- 대표적인 구현체 :
ArrayList
,LinkedList
// List 를 구현한 ArrayList
ArrayList<String> names = new ArrayList<>();
names.add("first"); // 1 번째 요소 추가
names.add("second"); // 2 번째 요소 추가
names.add("third"); // 3 번째 요소 추가
names.add("1");
names.add("2");
// ✅ 순서 보장
System.out.println("names = " + names);
// ✅ 중복 데이터 허용
names.add("second");
System.out.println("names = " + names);
// ✅ 단건 조회
System.out.println("1 번째 요소 조회: " + names.get(0)); // 조회 first
// ✅ 데이터 삭제
names.remove("third");
System.out.println("names = " + names);
Set 인터페이스를 구현한 HashSet
HashSet
은 순서를 유지하지 않고 중복허용 X- → 순서를 보장하지 않기 때문에
get()
지원을 하지 않습니다. - 요소 추가 →
add("값")
- 요소 제거 →
remove("값")
- 대표적인 구현체 :
HashSet
,TreeSet
// Set 을 구현한 HashSet
HashSet<String> uniqueNames = new HashSet<>();
// ✅ 추가
uniqueNames.add("first");
uniqueNames.add("second");
uniqueNames.add("third");
uniqueNames.add("1");
uniqueNames.add("2");
// ⚠️ 순서를 보장 안함
System.out.println("uniqueNames = " + uniqueNames);
uniqueNames.get(0); // ❌ get 사용 불가
// ⚠️ 중복 불가
uniqueNames.add("Spartan");
System.out.println("uniqueNames = " + uniqueNames);
// ✅ 제거
uniqueNames.remove("Spartan");
System.out.println("uniqueNames = " + uniqueNames);
Map 인터페이스를 구현한 HashMap
HashMap
은키(Key) - 값(Value)
구조로 데이터를 저장한다.(키: 값)키(Key)
는 중복될 수 없지만값(Value)
은 중복 가능.- 순서를 보장하지 않음
- 요소 추가 →
put(”키”, 값)
- 요소 조회 →
get(”키”)
- 요소 제거 →
remove("Steve")
- 키 확인 →
keySet()
- 값 확인 →
values()
- 대표적인 구현체 :
HashMap
,TreeMap
// Map 을 구현한 HashMap
HashMap<String, Integer> memberMap = new HashMap<>();
// ✅ 추가
memberMap.put("one", 15);
memberMap.put("two", 15); // ✅ 값은 중복 가능
memberMap.put("three", 1);
memberMap.put("four", 2);
memberMap.put("five", 3);
// ⚠️ 순서 보장 안함
System.out.println("memberMap = " + memberMap);
// ⚠️ 키 중복 불가: 값 덮어쓰기 발생
memberMap.put("one", 5);
System.out.println("memberMap = " + memberMap);
// ✅ 조회: 15
System.out.println(memberMap.get("one"));
// ✅ 삭제 가능
memberMap.remove("two");
System.out.println("memberMap = " + memberMap);
// ✅ 키 확인
Set<String> keys = memberMap.keySet();
System.out.println("keys = " + keys);
// ✅ 값 확인
Collection<Integer> values = memberMap.values();
System.out.println("values = " + values);
'Language > Java' 카테고리의 다른 글
[Java] if-else와 try-catch에 대해서 (0) | 2025.03.14 |
---|---|
[Java] 제네릭(Generic) (0) | 2025.03.06 |
[Java] 기본형과 참조형 (0) | 2025.03.06 |
[Java] 익명 클래스 (Annoymous Class)와 람다 (Lamda) (0) | 2025.03.05 |
[Java] 클래스와 데이터 (0) | 2025.02.27 |