출처: http://docs.oracle.com/javase/tutorial/java/generics/types.html
Generics이란?
generics은 class와 interface를 type화 시킬 수 있다. generics를 사용하면 다음과 같은 이점이 있다.
컴파일 시에 generic 코드를 체크 함으로써 에러를 미리 방지 할 수 있다.
List list = new ArrayList();
list.add("hello");
String s = (String) list.get(0);
를 generics을 사용한다면,
List<String> list = new ArrayList<String>();
list.add("hello");
String s = list.get(0);
- generic algorithm을 사용 할 수 있다.
다른 type들로 이루어진 collections에 대한 generic algorithm을 사용할 수 있다.
일반적인 Generics 사용법
generic class는 다음과 같은 형태이다.
class name<T1, T2, T3, .... Tn> { ... }
예제를 통해 보자.
generic을 써서 위의 코드를 다시 작성하면,
보는 바와 같이 Object 대신 type T를 사용할 수 있다. 왜 T냐면.. 보통 다음과 같은 conventions를 따르기 때문이다.
E |
Element |
K |
Key |
N |
Number |
T |
Type |
V |
Value |
S, U, V |
2nd, 3rd, 4th types |
Generic Type 사용법
geneirc Box class를 참조시에 다음과 같이 한다.
위의 경우 Type argument이다. 여기서 Type paramemter 랑 Type argument의 차이점을 보자.
Type Parameter and Type Argument Terminology: Many developers use the terms "type parameter" and "type argument" interchangeably, but these terms are not the same. When coding, one provides type arguments in order to create a parameterized type. Therefore, the T in Foo<T> is a type parameter and the String in Foo<String> f is a type argument. This lesson observes this definition when using these terms