[Java] Generic(제네릭)

SEOP·2024년 5월 19일
0
post-thumbnail
post-custom-banner

Generic이란?

결정되지 않은 타입을 파라미터로 처리하고,
실제 사용할 때 파라미터를 구체적인 타입으로 대체시키는 기능

예시

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
}

생성자에 문자 혹은 숫자를 넣었을 때
잘 생성된다.

Generic Method

타입 파라미터를 가지고 있는 메소드를 말함.
타입 파라미터가 메소드 선언부에 정의된다는 점에서 제네릭 타입과 차이가 있다.

제네릭 메소드는 리턴 타입 앞에 <> 기호를 추가하고 타입 파라미터를 정의한 뒤, 리턴 타입과 매개변수 타입에서 사용한다.

예시

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
}

주의1

public static Box<T> boxing(T t){
	Box box = new Box(t);
	return box;
}

반환되는 Box<T> 앞에 <T>를 삭제하면 오류

주의2

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

profile
응애 나 애기 개발자
post-custom-banner

0개의 댓글