앞서 제네릭과 관련해서는 클래스의 선언, 그리고 해당 클래스의 인스턴스 생성 시점에 주로 사용되는 타입 파라미터 정의와 관련해서 제네릭 타입을 사용하는 유형을 중심으로 살펴보았습니다. 이번 아티클에서는, 메서드에서 타입 파라미터를 사용해 다양한 결과를 얻는 제네릭 메서드에 대해서 알아보도록 하겠습니다.
· 제네릭 메서드는 파라미터 타입과 리턴 타입으로 타입 파라미터를 갖는 메서드를 의미합니다.
· 제네릭 메서드를 선언하는 방법은 다음과 같습니다.
- 메스드의 리턴타입 바로 앞에 <타입 파라미터> 를 추가하고
- 리턴타입과 파라미터 타입에 타입 파라미터를 사용합니다.
// 제네릭 메서드 선언 유형
public <타입파라미터,...> 리턴타입 메서드명(파라미터,...) { ... }
// 제네릭 메서드 예시
public <T> Box<T> boxing(T t) { ... }
위의 제네릭 메서드 boxing(T t)의 예시를 보겠습니다. 해당 메서드의 이름은 boxing입니다. 그리고 리턴타입은 Box<T> 입니다. 메서드 파라미터 타입 역시 T인데, 제네릭 타입파라미터가 <T>로 선언되어 있습니다.
이렇게만 보아서는 아직 제네릭 메서드의 용례가 명확하게 이해되지는 않을 수 있습니다. 일단은 구조에 먼저 익숙해지는 연습을 하도록 합시다.
그럼 위와 같이 선언된 제네릭 메서드를 호출할 때는 어떻게 사용해야 할까요? 위에서 boxing(T t)라는 메서드를 호출해 특정 변수에 리턴 값을 저장한다고 가정해 보겠습니다. 이때, 제네릭 메서드 호출 방식에는 두 가지 방법이 존재합니다. 바로 메서드의 이름을 작성해 호출할 때 '타입 파라미터'를 명시적(explicit)으로 기재하는 방식과 기재하지 않고 암시(implicit)하는 방법이죠.
// 타입 파라미터 명시
리턴타입 변수 = <구체적타입>메서드명(파라미터);
// 타입 파라미터 추정
리턴타입 변수 = 메서드명(파라미터);
위에서 구체적인 타입 파라미터를 명시하지 않는 경우에는, 컴파일러가 파라미터의 타입을 보고 타입 파라미터를 추정하게 됩니다. 위에서 예시로 만들었던 boxing(T t) 메서드를 예로 들어볼까요?
Box<Integer> box = <Integer>boxing(99);
Box<Integer> box = boxing(99);
위에서 boxing에 전달된 파라미터의 인자 값인 99를 통해 Integer 타입인 것을 암시적으로 추정할 수도 있고, 혹은 명시할 수도 있습니다.
'Programming > JAVA' 카테고리의 다른 글
제네릭(3) - 제네릭 메서드 3 (0) | 2023.05.02 |
---|---|
제네릭(3) - 제네릭 메서드 2 (0) | 2023.05.01 |
제네릭(2) - 멀티타입 파라미터 (0) | 2023.04.26 |
제네릭(1) - 제네릭 타입 2 (0) | 2023.04.25 |
제네릭(1) - 제네릭 타입 1 (0) | 2023.04.25 |