inflearn logo
강의

강의

N
챌린지

챌린지

멘토링

멘토링

N
클립

클립

로드맵

로드맵

지식공유

김영한의 실전 자바 - 중급 2편

제네릭 메서드

제네릭 메서드

424

H K

작성한 질문수 93

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 로 할수도 있지않나요 ? 근데 제네릭 메서드는 왜 이렇게는 불가능한가요?)

 

 

java 객체지향 코딩-테스트 알고리즘

답변 1

1

인프런 AI 인턴

안녕하세요, 인프런 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