Java, Generic Type Tutorial. |
Generic Type.
주로 Java Collection 에서 많이 사용한다.
Collection 에서는 어떤 자료를 담을지 알 수 없으므로 최상위 객체인 Object 형태로 저장 및 관리하도록 설계되어 있다. 하지만 이렇게 Object 로만 두게 되면, 일관성 있는 Type 을 유지할 수 없는 경우도 많이 생긴다. 일관성 있는 Type 을 유지하지 못하면, Runtime Error 에 마딱뜨릴 확률이 높아져서 좋지 않다. 이것을 해결하기 위해 Compile Time 에 원하지 않는 Type 이 들어가는 것을 방지하기 위해 고안 된 것이 Generic Type 이다.
Generic Class 정의
// T 라는 객체를 다루는 Container
public class Container<T>{
private T t;
public void set( T t ){
this.t = t;
}
public T get(){
return t;
}
}
Generic Class 생성.
Container<Integer> intergerContainer = new Container<Integer>();
Generic Type Parameters
타입 매개변수로는 T 이외에도 어떤 하나의 대문자를 사용하면 된다.
보통 사용되는 녀석들은..
E - Element
K - Key
V - Value
T - Type
N - Number
...
Generic Method
생성자를 비롯하여 메서드들도 Generic Type 을 사용할 수 있는데,
다음과 같이 return type 앞에 generic 을 표시해주어야 하며, generic 이 유효한 범위는 해당 method 가 불리는 시점이다.
public <Y> void genericTest( Y y ){
// do sth...
}
Generic Restriction.
Generic 을 받을 때 그냥 generic type 으로만 받으면 다시 Object 와 같은 녀석들이 올 수 있고, 그럼 별로 유용성이 없다. 조금 더 효율적으로 하기 위해서는 generic type 에 제한을 줄 수 있는데 다음과 같이 extends 를 써서 줄 수 있다.
public <Y extends MyView> void genericTest( Y y ){
// do sth...
}
Wild Card
? 는 알 수 없는 모든 타입을 정의할 수 있다.
? extends MyObject - MyObject 를 상속한 모든 객체를 일컷는다.
? super MyObject - MyObject 가 상속한 모든 객체를 일컫는다.
'프로그래밍 놀이터 > 안드로이드, Java' 카테고리의 다른 글
[java] Decimal Pattern 특수문자. (0) | 2014.01.07 |
---|---|
[android] ActionBarSherlock vs. ActionBar Compatibility (0) | 2014.01.07 |
[android] RefreshListView source code. (0) | 2014.01.06 |
[android] multiple layers of defense. (0) | 2014.01.03 |
[Java] Reflection Tutorial - Dynamic Proxies (0) | 2014.01.03 |
댓글