해당 게시물은 [제대로 파는 자바 (Java) - by 얄코]를 수강한 내용을 바탕으로 작성하였습니다.
자료형을 필요에 따라 동적으로 정할 수 있도록 해 줌
자료형을 변수로 갖는다고 이해
메소드 또는 클래스에 사용
제네릭 메소드
// 제네릭 메소드
// T : 타입변수. 원하는 어떤 이름으로든 명명 가능
public static <T> T pickRandom (T a, T b) {
return Math.random() > 0.5 ? a : b;
}
public static <T> void arraySwap (T[] array, int a, int b) {
if (array.length <= Math.max(a, b)) return;
T temp = array[a];
array[a] = array[b];
array[b] = temp;
}
제네릭 클래스
※생성시 오른쪽에 빈 <> 을 붙이는 이유
빈 <> 라도 붙이지 않으면 생성하는 인스턴스의 자료형을 체크하지 않습니다.
때문에 자료형에 맞게 대입해도 컴파일러가 걸러내지 못하죠.
<> 를 붙이면 타입추론을 통해 자료형에 맞는 제네릭을 채워 넣게 되고,
그렇게 함으로써 의도한 바에 맞지 않은 자료형을 사용했을 때 컴파일 오류를 발생시켜 예상치 못한 문제를 차단하게 됩니다.
위의 코드에서 첫줄은 제네릭 타입을 잘못 사용했음에도 불구하고 오류가 나지 않지만
두번째 줄은 컴파일 오류가 발생하는 것을 볼 수 있습니다.
때문에 두번째 줄의 코드는 개발자가 코드를 잘못 작성했음을 사전에 알고 수정할 수 있습니다.
특정 조건을 갖춘 자료형만 쓸 수 있도록 하는 방법
제한된 제네릭
// 💡 T는 Number를 상속한 클래스이어야 한다는 조건
public static <T extends Number> double add2Num(T a, T b) {
return a.doubleValue() + b.doubleValue();
}