컨테이너는 객체를 저장하는 데이터 구조를 의미합니다. 자바에서는 객체를 효율적으로 관리하기 위한 다양한 컨테이너 클래스를 java.util 패키지에서 제공합니다.
1. 컨테이너 계층 구조
컨테이너 API는 Collection과 Map 인터페이스로 구분됩니다. Collection은 단일 객체 저장을, Map은 키-값 쌍 저장을 처리합니다. Collection은 다시 Set(중복 불가, 순서 없음)과 List(중복 허용, 순서 있음)로 분류됩니다.
2. Collection 핵심 메서드
int size(): 요소 개수 반환boolean add(E e): 요소 추가boolean remove(Object o): 요소 제거Iterator<E> iterator(): 반복자 생성boolean contains(Object o): 요소 존재 여부 확인
3. 반복자(Iterator) 패턴
컬렉션 순회를 위한 표준 인터페이스입니다:
public class IteratorExample {
public static void main(String[] args) {
Set<String> dataSet = new HashSet<>();
dataSet.add("Alpha");
dataSet.add("Beta");
dataSet.add("Gamma");
Iterator<String> iter = dataSet.iterator();
while(iter.hasNext()) {
String element = iter.next();
if(element.equals("Beta")) {
iter.remove();
} else {
System.out.println(element);
}
}
}
}
4. 향상된 for문
간결한 순회를 제공하지만 요소 수정에는 제한적입니다:
List<Integer> numList = Arrays.asList(10, 20, 30);
for(Integer num : numList) {
System.out.println(num * 2);
}
5. Set 구현체 특성
HashSet(해시 기반), TreeSet(정렬 지원)이 대표적입니다:
Set<Double> values = new TreeSet<>();
values.add(5.8);
values.add(3.2);
System.out.println(values); // [3.2, 5.8] 자동 정렬
6. List 작업 유틸리티
Collections 클래스의 정적 메서드 활용:
List<Character> chars = new ArrayList<>();
Collections.addAll(chars, 'X', 'Y', 'Z');
Collections.reverse(chars); // [Z, Y, X]
Collections.rotate(chars, 1); // [X, Z, Y]
7. 객체 정렬: Comparable
사용자 정의 객체 정렬 구현 예시:
public class Product implements Comparable<Product> {
private String id;
private String name;
@Override
public int compareTo(Product other) {
return this.id.compareTo(other.id);
}
}
8. Map 인터페이스
키-값 매핑을 위한 핵심 연산:
V put(K key, V value): 엔트리 추가V get(Object key): 값 조회Set<K> keySet(): 키 집합 반환