✅ 1. Map, List, Set 비교
🔹 공통점
- 모두 컬렉션 프레임워크의 일부이며, 데이터를 담는 컨테이너입니다.
- 하지만 용도와 특징이 다릅니다.
📊 주요 차이점 요약
| 항목 | List | Set | Map |
|---|
| 기본 구조 | 순서 있는 데이터 집합 | 순서 없는 유일한 데이터 집합 | 키(key)-값(value) 쌍 |
| 중복 허용 | O (중복 가능) | X (중복 불가) | 키: X, 값: O |
| 순서 유지 | O (인덱스로 접근 가능) | 구현체에 따라 다름 (HashSet: 무순서, LinkedHashSet: 순서 유지) | 구현체에 따라 다름 |
| 대표 클래스 | ArrayList, LinkedList | HashSet, TreeSet | HashMap, TreeMap |
| 접근 방식 | 인덱스로 접근 | 값 자체로 확인 | 키로 접근 |
🔸 사용 예
✅ List
List<String> list = new ArrayList<>();
list.add("apple");
list.add("banana");
list.add("apple");
System.out.println(list);
✅ Set
Set<String> set = new HashSet<>();
set.add("apple");
set.add("banana");
set.add("apple");
System.out.println(set);
✅ Map
Map<String, Integer> map = new HashMap<>();
map.put("apple", 1);
map.put("banana", 2);
map.put("apple", 3);
System.out.println(map);
✅ 2. 제네릭 클래스 만들기
직접 타입을 파라미터로 받는 클래스를 만들 수 있어요. T, E, K, V 등을 자주 사용합니다.
🔹 기본 구조
public class Box<T> {
private T value;
public void set(T value) {
this.value = value;
}
public T get() {
return value;
}
}
🔹 사용 예
public class Main {
public static void main(String[] args) {
Box<String> stringBox = new Box<>();
stringBox.set("Hello");
System.out.println(stringBox.get());
Box<Integer> intBox = new Box<>();
intBox.set(100);
System.out.println(intBox.get());
}
}
🔹 여러 개 타입 지정도 가능
public class Pair<K, V> {
private K key;
private V value;
public Pair(K key, V value) {
this.key = key;
this.value = value;
}
public K getKey() { return key; }
public V getValue() { return value; }
}
사용 예
Pair<String, Integer> pair = new Pair<>("apple", 3);
System.out.println(pair.getKey());
System.out.println(pair.getValue());
✅ 요약 정리
| 항목 | 설명 |
|---|
List | 순서 있음, 중복 허용, 인덱스로 접근 |
Set | 순서 없음, 중복 불가 |
Map | 키-값 쌍 저장, 키는 유일 |
| 제네릭 클래스 | 타입을 외부에서 지정 가능, 형변환 없이 사용 가능, 타입 안정성 제공 |