제네릭이 필요한 이유
담을 곳이 필요할 때에는 타입별로 클래스를 만들어 줘야 함
↓
Object를 통해 다형성을 사용해서 해결하기(코드 재사용 O, 타입 안전성 X)
장점 : 코드의 중복 제거, 코드 재사용 가능
단점1 : 타입 안전성 문제 발생
단점2 : (Integer)과 같은 타입 캐스팅 코드가 필요함 (∵ Integer = Object는 자식은 부모를 담을 수 없으므로 성립하지 않음)
↓
제네릭 적용(코드 재사용 O, 타입 안전성 O)
package generic.ex1;
public class GenericBox<T> {
private T value;
public void set(T value) {
this.value = value;
}
public T get() {
return value;
}
}
package generic.ex1;
public class BoxMain3 {
public static void main(String[] args) {
GenericBox<Integer> integerBox = new GenericBox<Integer>(); //생성 시점에
T의 타입 결정
integerBox.set(10);
//integerBox.set("문자100"); // Integer 타입만 허용, 컴파일 오류
Integer integer = integerBox.get(); // Integer 타입 반환 (캐스팅 X)
System.out.println("integer = " + integer);
GenericBox<String> stringBox = new GenericBox<String>();
stringBox.set("hello"); // String 타입만 허용
String str = stringBox.get(); // String 타입만 반환
System.out.println("str = " + str);
}
}
제네릭이란?
- GenericBox<T>
- T : 타입 매개변수, String 과 같은 타입이 된다.
- 객체 생성 시점에 타입이 결정된다.
- 생성 시점에 타입이 아예 정해지므로, 타입 캐스팅이 필요 없다.
제네릭 용어와 관례
- 메서드는 매개변수에 인자를 전달해서 사용할 값을 결정한다.
- 제네릭 클래스는 타입 매개변수에 타입 인자를 전달해서 사용할 타입을 결정한다.
- 타입 매개변수 : GenericBox<T> 의 T
- 타입 인자 : GenericBox<Integer>의 Integer
- 한 번에 여러 타입 매개변수 선언 가능 ex) class Data<K, V>
- 타입 인자로 래퍼 클래스를 사용해야 한다. 기본형(int, double ...)은 사용 불가능
'study > Java' 카테고리의 다른 글
| LinkedList (0) | 2025.04.04 |
|---|---|
| ArrayList (0) | 2025.04.03 |
| Generic2 (0) | 2025.04.02 |
| Java에서 return문 누락으로 발생하는 오류와 해결 방법 (0) | 2025.03.05 |
| for문 (0) | 2025.02.20 |