결정되지 않은 타입을 파라미터로 처리하고,
실제 사용할 때 파라미터를 구체적인 타입으로 대체시키는 기능
import lombok.*;
@NoArgsConstructor
@AllArgsConstructor
@Getter
@Setter
public class Box<T> {
private T t;
}
이런 식으로 Box 클래스를 생성하고,
생성자를 이용하여 생성해본다.
public static void main(String[] args) {
Box box1 = new Box("HelloWorld");
System.out.println(box1.getT()); //HelloWorld
Box box2 = new Box(1234);
System.out.println(box2.getT()); //1234
}
생성자에 문자 혹은 숫자를 넣었을 때
잘 생성된다.
타입 파라미터를 가지고 있는 메소드를 말함.
타입 파라미터가 메소드 선언부에 정의된다는 점에서 제네릭 타입과 차이가 있다.
제네릭 메소드는 리턴 타입 앞에 <> 기호를 추가하고 타입 파라미터를 정의한 뒤, 리턴 타입과 매개변수 타입에서 사용한다.
public static <T> Box<T> boxing(T t){
Box box = new Box(t);
return box;
}
boxing 메소드를 작성하여
메소드만으로 box 객체를 반환받도록 함.
public static void main(String[] args) {
Box<String> box1 = boxing("HelloWorld");
System.out.println(box1.getT()); //HelloWorld
Box<Integer> box2 = boxing(1234);
System.out.println(box2.getT()); //1234
}
public static Box<T> boxing(T t){
Box box = new Box(t);
return box;
}
반환되는 Box<T>
앞에 <T>
를 삭제하면 오류
public static Box<String> boxing(String t){
Box box = new Box(t);
return box;
}
<T>
를 삭제했을 경우,
반환 타입에 <T>
대신 타입을 지정했다면 오류 안난다.
사실 이와 같은 경우, 제네릭 메소드라고 부를 수는 없다고 판단된다.
참고 : https://youtu.be/7r6oaxzlRhg?si=jtm4EuIXmXlPm3-q
참고 : https://youtu.be/U1s-zjKzjyM?si=pR0dAEmFpBI3EBdQ