자바 프로그램에서 대용량 데이터를 동적으로 추가, 삭제, 검색, 정렬하기 위한 표준 자료구조 인터페이스 집합인 **컬렉션 프레임워크(Collection Framework)**를 익힙니다.
1. 컬렉션 & 제네릭 용어 사전 (Glossary)
- Generics (제네릭): 클래스나 컬렉션에서 사용할 데이터 타입을 컴파일 시점에 지정하여 불필요한 형변환(Casting) 오류를 예방하는 기술입니다. (예:
ArrayList<String>) - List Interface: 데이터의 순서가 유지되며, 중복 데이터를 허용하는 동적 배열 형태의 자료구조입니다. (
ArrayList,LinkedList) - Set Interface: 데이터의 순서를 보장하지 않으며, 중복 데이터를 절대로 허용하지 않는 집합 형태의 자료구조입니다. (
HashSet,TreeSet) - Map Interface: 순서 대신 Key-Value(키-값) 쌍으로 저장하며, Key의 중복은 허용하지 않는 사전형 자료구조입니다. (
HashMap,TreeMap)
2. 컬렉션 3대 인터페이스 비교표
| 컬렉션 구분 | 대표 클래스 | 순서 유지 | 중복 허용 | 주요 사용 목적 및 성능 특성 |
|---|---|---|---|---|
| List 계열 | ArrayList |
⭕ | ⭕ | 인덱스를 통한 고속 검색($O(1)$) |
LinkedList |
⭕ | ⭕ | 중간 요소의 빈번한 추가/삭제($O(1)$) | |
| Set 계열 | HashSet |
❌ | ❌ (불가) | 데이터의 고유 중복 제거 |
| Map 계열 | HashMap |
❌ | Key 불가 / Value 허용 | Key를 이용한 초고속 데이터 조회($O(1)$) |
3. HashMap 및 ArrayList 실전 프로그래밍 예제
import java.util.*;
public class CollectionFrameworkMain {
public static void main(String[] args) {
// 1. ArrayList 동적 배열 활용
List<String> fruits = new ArrayList<>();
fruits.add("사과");
fruits.add("바나나");
fruits.add("사과"); // 중복 허용됨
System.out.println("과일 리스트: " + fruits);
// 2. HashMap (주민번호 - 이름) 매핑 활용
Map<String, String> userMap = new HashMap<>();
userMap.put("900101-1000000", "홍길동");
userMap.put("950505-2000000", "김영희");
System.out.println("조회 결과: " + userMap.get("900101-1000000"));
}
}
4. 자주 묻는 질문 (Q&A)
Q. ArrayList와 LinkedList는 언제 구분해서 써야 하나요?
A. 데이터의 검색이나 순회가 주를 이룰 때는 인덱스 접근이 빠른 ArrayList를 쓰고, 중간에 위치한 데이터의 삽입과 삭제가 자주 발생하는 경우에는 LinkedList를 사용하는 것이 효율적입니다.