작성
·
330
·
수정됨
0
역시 갓 영한님 믿고듣는 강의.. 감사합니다
질문이 하나 있습니다.
public static <T> T genericMethod(T t) {
System.out.println("generic print: " + t);
return t;
}
이 코드에서 타입 지정해주는 T를
왜 다 똑같은 타입으로 써야 하는지 궁급합니다.
예를 들자면 위 코드를 보면 매개변수 타입도 T이고 반환 타입도 T인데
매개변수의 타입과 반환타입을 꼭 맞춰서 써야 하는지 궁금하네요
public static <T> T genericMethod(A t) {
System.out.println("generic print: " + t);
return t;
}
이런식으로는 왜 못쓰는건가요 ?
(매개변수로는 String을 받지만 결과 타입은 Integer 로 할수도 있지않나요 ? 근데 제네릭 메서드는 왜 이렇게는 불가능한가요?)
답변 1
1
안녕하세요, 인프런 AI 인턴입니다.
제네릭 메서드에서 매개변수 타입과 반환 타입을 같은 타입 파라미터 T
로 지정하는 것은 그 메서드의 입력과 출력이 같은 타입을 유지한다는 것을 보장하기 위함입니다. 제네릭 타입 T
를 사용하는 주목적 중 하나는 타입 안전성을 제공하며, 동시에 타입 캐스팅 없이 타입의 유연성을 향상시키는 것입니다.
다른 타입으로 매개변수와 반환 타입을 지정하려면, 다른 타입 파라미터를 사용해야 합니다. 예를 들어, 매개변수로는 A
타입을 받고 결과로 T
타입을 반환하고 싶다면 다음과 같이 작성할 수 있습니다.
public static <T, A> T genericMethod(A a) {
// 이 곳에서 A 타입을 T 타입으로 변환하는 로직 필요
return ...; // T 타입 반환
}
이렇게 하면, 매개변수 타입과 반환 타입이 다를 때도 제네릭 메서드를 사용할 수 있습니다. 하지만, 이 경우 매개변수 타입 A
에서 반환 타입 T
로의 변환 로직이 필요하며, 이 변환 과정에서 타입 안전성을 보장하기 어려울 수 있습니다. 그렇기 때문에, 일반적으로 매개변수와 반환 타입을 같게 설정하여 타입 안전성을 유지하는 경우가 많습니다.
제네릭 메서드에서 매개변수의 타입과 반환 타입을 다르게 설정할 수 있지만, 명시적인 타입 변환 처리가 필요하며, 이는 타입 안전성을 저해할 수 있는 잠재적인 위험을 내포하고 있기 때문에 주의해야 합니다.