제네릭 메서드
424
작성한 질문수 93
역시 갓 영한님 믿고듣는 강의.. 감사합니다
질문이 하나 있습니다.
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로의 변환 로직이 필요하며, 이 변환 과정에서 타입 안전성을 보장하기 어려울 수 있습니다. 그렇기 때문에, 일반적으로 매개변수와 반환 타입을 같게 설정하여 타입 안전성을 유지하는 경우가 많습니다.
제네릭 메서드에서 매개변수의 타입과 반환 타입을 다르게 설정할 수 있지만, 명시적인 타입 변환 처리가 필요하며, 이는 타입 안전성을 저해할 수 있는 잠재적인 위험을 내포하고 있기 때문에 주의해야 합니다.
제네릭 타입 매개변수 제한과 관련한 문의입니다.
0
80
3
강의가 좀 버겁다 느껴질 때 학습방법 문의
1
135
4
제네릭 반환값 및 파라미터 선언 방식의 변화 <T> T
0
63
1
new T()가 안 되는 니유
0
102
1
안녕하세요, 문제와 실행 결과가 다른 부분이 있어 제보드립니다.
0
98
2
자바 로드맵 선택 질문
0
111
2
실전 자바 중급 - 2편 후 추천 강의
0
177
2
실프로젝트에서 Java25버전 사용
0
121
1
Arrays.sort
0
68
1
블로그 작성 시, 저작권 문제에 대하여
0
166
1
중급2편 56강의 bucket.add(value); 메서드가 이해가 안됩니다.
0
94
3
pop()과 poll()의 차이
0
94
1
특정 index의 노드 조회하기 질문
0
66
2
List.of() 비어있는 불변 리스트 생성
0
81
2
문제2: 개 타입 반환
0
56
2
[리뷰] 중급2편까지 겨우 완강 했습니다.
0
114
2
문제와 풀이1 Ex2와 Ex3
0
65
2
노드 삭제시 노드 null값으로 초기화
0
78
2
강의영상에 대한 질문
0
57
1
타입 매개변수 제한
0
59
1
compareTo
0
68
1
직접 구현하는 연결리스트 3 - 추가 부분 질문있습니다
0
99
3
섹션 8-58 equals and hashcode 에서 코드가 다르게 생성됨
0
70
2
퀴즈 오류 관련 문의
0
109
1





