.... 제네릭 좋은거 알았으니 그만좀 합시다...

보통 스테틱 메소드에 잘사용 되는데 전달 받는 인자에 따라 다른 동작을 한다는 오버로딩과도 비슷합니다.
다만 오버로딩처럼 여러개 안써도 된다는 장점이 있죠

공통적으로 상속한 클레스를 이용한 작업을 할때 제네릭을 사용하면 좋다.

일반적으로 Collections나 Arrays의 대부분의 메소드가 제네릭 메소드이다. 두 클레스의 메소드를 한번 훑어보고 대충 어떤 상황에서 쓰면될지 감을 잡아보자.

끗.


추가 12.10.04

제네릭 매소드의 유용한 활용들

1 제네릭 타입의 생성자 간단히 하기

맵이나 리스트 같은 자료구조 클레스를 생성할때는 항상

Map <Integer, String> map = new HashMap<Integer,String>();

의 형태로 생성자에도 동일한 제네릭 타입을 적어줘야한다. 이런 경우에

static <K,V> HashMap<K,V> newHashMap(){

    return new HashMap<K,V>();

}

이렇게 작성해주고

Map <Integer, String> map = newHashMap();

으로 간단히 써줄수 있다.

하지만 이런 부분은 java7 에서 새로나온 기능으로 해결할수 있다.

Map <Integer, String> map = new HashMap<>();

이렇게 꺽쇠만 적어주고 내용은 채우지 않아도 되게 바뀌었다. 

물론 java6와 java7을 왔다갔다 하면서 쓴다면 먼저 나온 static method 가 더 낫지만 말이다.



2, 두가지 클레스를 상속받은 인자를 전달 받고 싶을때

물론 자바에서는 다중상속이 되지 않기 때문에 클레스가 아니라 인터페이스입니다.

여러 인터페이스를 작성해서 상속을 시킨후 어떤 함수에서는 A와 B를 동시에 상속한 클레스.

어떤 함수에서는 B,C를 상속한 클레스 를 사용한다고 했을때 사용할수 있는 방법입니다.

이걸 해결하려고 각각을 상속하는 인터페이스를 또 만든다거나 하는 불필요한짓을 한적이 있는데

아래의 방법을 쓰면 간단해지네요

<T extends Comparable<T>,Serialize> void f(T a){

}

이렇게 extends 뒤에 쉼표를 이용해서 인터페이스를 구분해주면 T는 Comparable<T> 와 

Serialize 인터페이스를 동시에 구현하는 클레스가 됩니다.

Posted by 동적할당
: