🎯 이건 자바에서 유연하고 타입 안정성 있게 코드 짜는 핵심 도구
클래스나 메서드에서 사용할 데이터 타입을 외부에서 지정할 수 있게 해주는 문법이다.
➡️ 즉, 타입을 나중에 결정하게 하는 것!
List<String> list = new ArrayList<>();
list.add("Hello"); // O
list.add(123); // ❌ 컴파일 에러! (타입 안정성)
<String> → 이게 제네릭.
list는 오직 문자열만 넣을 수 있다. 그래서 안전하고, 캐스팅 없이 쓸 수 있다.
String msg = list.get(0); // 바로 꺼내 쓸 수 있음!
List list = new ArrayList();
list.add("Hello");
list.add(123);
String s = (String) list.get(0); // 직접 형변환 필요 😓
실수로 숫자 넣어도 컴파일 오류 없음
꺼낼 때 항상 형변환 해야 함
런타임 에러가 날 수 있음
| 이유 | 설명 |
|---|---|
| ✅ 타입 안정성 | 잘못된 타입 넣는 걸 컴파일러가 막아줌 |
| ✅ 캐스팅 필요 없음 | 꺼낼 때 형변환 없이 바로 사용 가능 |
| ✅ 코드 재사용성 | 다양한 타입에도 재사용 가능 |
class Box<T> {
private T value;
public void set(T value) { this.value = value; }
public T get() { return value; }
}
사용할 때:
Box<String> stringBox = new Box<>();
stringBox.set("Hi!");
System.out.println(stringBox.get()); // Hi!
Box<Integer> intBox = new Box<>();
intBox.set(123);
System.out.println(intBox.get()); // 123
<T>는 타입 매개변수! String, Integer 등으로 나중에 지정해주는 것이다.
| 용어 | 의미 |
|---|---|
List<T> | T라는 타입을 나중에 지정할 수 있는 리스트 |
T, E, K, V | 흔히 쓰는 제네릭 타입 이름 (Type, Element, Key, Value 등) |
<?> | 와일드카드, 어떤 타입이든 허용하겠다는 뜻 |