제네릭 메소드란?
제네릭 메소드는 메소드의 선언 부에 적은 제네릭으로 리턴 타입과 파라미터의 타입을 정하는 메소드입니다.
제네릭메소드의 예제 코드는 아래와 같습니다.
1 | public class Test<T, S extends T> { |
<T, S extends T> 부분은 어떤 generic을 쓸 지에 대한 내용입니다.
T는 임의의 class, S는 T를 extends한 class여야 함을 명시합니다.
T name(S param) 부분에서는 앞선 정의에서 S 클래스를 parameter로 받고,
T 클래스의 객체로 리턴한다는 뜻입니다.
static generic method, 제네릭 메소드 static
먼저, 결론적으로는 아래와 같이 사용하면 됩니다.
1 | public class Test<T, S extends T> { |
앞선 “제네릭 메소드란?” 클래스에서 제네릭 메소드를 static로 사용하려고 아래와 같이 작성하면,
IDE에서 오류를 발생시킵니다.
1 | public class Test<T, S extends T> { |
오류내용
1 | The method name cannot be declared static; |
오류가 발생하는 이유는 Test 클래스가 인스턴스가 되기 전에 static 메소드가 메모리에 올라가게 되는데,
이 때 타입 T가 어떤 타입인지 결정되지 않기 때문에 위와 같이 사용할 수 없기 때문입니다.
그러나 아래와 같이 호출 시에 <T, S extends T>와 같이 static 키워드 뒤에 타입을 지정해준다면 static으로 사용이 가능합니다.
1 | public class Test<T, S extends T> { |
generic을 사용하는 class가 아니여도 아래와 같이 generic method를 사용할 수 있습니다.
(Test뒤에
1 | public class Test { |
제네릭 메소드 사용예제
1 | public class Test { |
1 | static <T> void ArrayToCollection(T[] a, Collection<T> c) { |