이번에 파헤쳐 볼 녀석은 자바 제네릭 메소드(Generic Method) 예요.
제네릭 메소드라는 단어 자체가 생소한데요.
사실 저는 한 번도 써보지 않은 기능이예요.
그래도 제네릭을 파헤치기로 마음 먹은 이상 알아볼 필요는 있을 것 같아요.
그러면 제네릭 메소드 파헤치기 진행시켜!
1. 제네릭 메소드 선언 구조
제네릭 메소드 구조는 아래와 같아요.
(public) (static) <제네릭타입 리스트> 리턴타입 함수명(제네릭타입1 변수1, 제네릭타입2 변수2, ...) {
...
}
이렇게만 봐서는 잘 와닿지 않죠.
코드로 확인해볼게요.
public static <T, U> String createInfo(T price, U author) {
...
}
이렇게 보니까 좀 편안하네요.
위의 제네릭 메소드 코드에서 낯설었던 부분은 함수 리턴 타입 앞에 오는 <T, U> 였어요.
함수 파라미터로 받는 제네릭 타입 리스트를 명시해주는 부분인데요.
이 제네릭 타입 리스트가 있냐 없냐로 제네릭 메소드냐 아니냐가 구분지어져요.
그러면 이어서 어떤 식으로 제네릭 메소드를 사용하는지 알아볼게요.
2. 제네릭 메소드 사용 예제
예시를 위해서 구현한 코드라 실용적이진 않지만 이해를 돕기 위해 작성한 부분이니 감안해서 봐주시면 좋을 것 같아요.
public class BookBox extends Box {
public static <T, U> String createInfo(T price, U author) {
StringBuffer info = new StringBuffer();
info.append("책의 가격은 ");
info.append(price);
info.append(" 입니다.");
info.append("\n");
info.append("지은이는 ");
info.append(author);
info.append(" 입니다.");
return info.toString();
}
}
BookBox 클래스에 createInfo 제네릭 메소드를 구현한 코드예요.
함수 파라미터로 T price, U author 라는 제네릭 타입 파라미터를 받고 있어요.
그리고 함수 리턴 타입 앞에 해당 제네릭 파라미터 리스트를 <T, U> 로 명시해주고 있어요.
위 함수는 제네릭 타입 파라미터 리스트가 선언되어 있기 때문에 제네릭 메소드가 맞아요.
그러면 main 함수에서 제네릭 메소드를 호출해볼게요.
public class Main {
public static void main(String[] args) {
String bookInfo = BookBox.<Integer, String>createInfo(25000, "이중석");
System.out.println(bookInfo);
}
}
제네릭 메소드를 static 으로 선언했기 때문에 BookBox 클래스에서 바로 함수를 호출할 수 있어요.
그런데 조금 특이한 부분이 눈에 들어오죠.
<Integer, String> 이 부분은 제네릭 타입을 명시해준 부분인데요.
전달 받는 파라미터 데이터 타입을 통해 컴파일시에 추론이 가능하기 때문에 해당 부분은 생략해도 괜찮아요.
main 함수를 실행하면 아래처럼 정상적으로 코드가 실행되는 것을 확인할 수 있어요.
이상으로 제네릭 메소드에 대해서 알아보았는데요.
사실 이번에 제네릭을 파헤치면서 처음으로 자세히 들여다본 것 같아요.
그정도로 실제로는 자주 사용하지 않는 기능이지만 이런 기능이 있구나하는 정도로 알아두면 좋을 것 같아요.
나중에 혹시 제네릭 메소드 코드를 봐도 당황하지 않을테니까요.
끝까지 읽어주셔서 감사해요.
'프로그래밍 > Java' 카테고리의 다른 글
자바 제네릭 파헤치기 - Generic Wildcard (0) | 2023.07.22 |
---|---|
자바 제네릭 파헤치기 - Generic Interface (0) | 2023.07.22 |
자바 제네릭 파헤치기 - Generic Class (0) | 2023.07.19 |
[Effective Java 3/E] 생성자에 매개변수가 많다면 빌더를 고려하라 (0) | 2023.07.16 |
[Effective Java 3/E] 생성자 대신 정적 팩터리 메서드를 고려하라 (0) | 2023.07.15 |