-
컬렉션 프레임워크란?
데이터를 저장하고 관리하기 위한 Java의 표준 라이브러리입니다. 배열의 한계를 극복하고 다양한 데이터 구조를 제공합니다.
배열의 한계
java// 배열의 문제점
String[] names = new String[5]; // 크기 고정
names[0] = “김철수”;
names[1] = “이영희”;
// names[5] = “박민수”; // 에러! 크기 초과
컬렉션의 장점
java// 컬렉션의 해결책
List names = new ArrayList<>(); // 동적 크기
names.add("김철수");
names.add("이영희");
names.add("박민수"); // 자동으로 크기 확장!
-
컬렉션 프레임워크 전체 구조도
최상위 구조
Iterable (인터페이스)
↓
Collection (인터페이스)
├── List
├── Set
└── Queue
Map<K,V> (별도 인터페이스 - Collection 상속 안함)
상세 계층 구조
Iterable
↓
Collection
├── List (순서O, 중복O)
│ ├── ArrayList
│ ├── LinkedList
│ └── Vector
│
├── Set (순서?, 중복X)
│ ├── HashSet (순서X)
│ ├── LinkedHashSet (삽입순서O)
│ └── TreeSet (정렬순서O)
│
└── Queue (FIFO)
├── LinkedList
├── PriorityQueue
└── ArrayDeque
Map<K,V> (키-값 쌍)
├── HashMap
├── LinkedHashMap
├── TreeMap
└── ConcurrentHashMap
- 주요 인터페이스들과 특징
Iterable 인터페이스
javapublic interface Iterable {
Iterator iterator(); // 반복자 제공
}
// 사용 예시
for(String name : names) { // Enhanced for-loop 가능
System.out.println(name);
}
Collection 인터페이스
javapublic interface Collection extends Iterable {
boolean add(E e); // 요소 추가
boolean remove(Object o); // 요소 제거
int size(); // 크기 반환
boolean isEmpty(); // 비어있는지 확인
boolean contains(Object o); // 포함 여부 확인
void clear(); // 모든 요소 제거
}
List 인터페이스
javapublic interface List extends Collection {
E get(int index); // 인덱스로 조회
E set(int index, E element); // 인덱스로 수정
void add(int index, E element); // 특정 위치에 삽입
E remove(int index); // 인덱스로 삭제
}
// 특징: 순서가 있고, 중복 허용, 인덱스 접근 가능
List fruits = new ArrayList<>();
fruits.add("사과"); // 0번 인덱스
fruits.add("바나나"); // 1번 인덱스
fruits.add("사과"); // 2번 인덱스 (중복 허용!)
Set 인터페이스
javapublic interface Set extends Collection {
// Collection의 메서드만 사용 (새로운 메서드 없음)
}
// 특징: 중복 불허, 순서는 구현체에 따라 다름
Set fruits = new HashSet<>();
fruits.add("사과");
fruits.add("바나나");
fruits.add("사과"); // 중복! 추가되지 않음
System.out.println(fruits.size()); // 2 (사과, 바나나만)
Queue 인터페이스
javapublic interface Queue extends Collection {
boolean offer(E e); // 요소 추가 (add와 유사)
E poll(); // 요소 제거하고 반환 (없으면 null)
E peek(); // 요소 확인 (제거하지 않음)
}
// 특징: FIFO (First In, First Out)
Queue queue = new LinkedList<>();
queue.offer("첫번째");
queue.offer("두번째");
String first = queue.poll(); // "첫번째" 반환
Map<K,V> 인터페이스
javapublic interface Map<K,V> {
V put(K key, V value); // 키-값 저장
V get(Object key); // 키로 값 조회
V remove(Object key); // 키로 삭제
boolean containsKey(Object key); // 키 존재 여부
Set keySet(); // 모든 키 반환
Collection values(); // 모든 값 반환
}
// 특징: 키-값 쌍, 키는 중복 불허
Map<String, Integer> ages = new HashMap<>();
ages.put(“김철수”, 25);
ages.put(“이영희”, 30);
ages.put(“김철수”, 26); // 기존 값 덮어씀
System.out.println(ages.get(“김철수”)); // 26