티스토리 뷰
출처: http://docs.oracle.com/javase/tutorial/java/generics/types.html
http://codecat.tistory.com/183
Generics이란?
generics은 class와 interface를 type화 시킬 수 있다. generics를 사용하면 다음과 같은 이점이 있다.
- 컴파일 시에 type 체크를 할 수 있다.
컴파일 시에 generic 코드를 체크 함으로써 에러를 미리 방지 할 수 있다.
- cast를 생략할 수 있다.
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> { ... }
예제를 통해 보자.
- public class Box {
- private Object object;
- public void set(Object object) { this.object = object; }
- public Object get() { return object; }
- }
generic을 써서 위의 코드를 다시 작성하면,
- /**
- * Generic version of the Box class.
- * @param <T> the type of the value being boxed
- */
- public class Box<T> {
- // T stands for "Type"
- private T t;
- public void set(T t) { this.t = t; }
- public T get() { return t; }
- }
보는 바와 같이 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를 참조시에 다음과 같이 한다.
Box<Integer> integerBox;
위의 경우 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
'IT > Java' 카테고리의 다른 글
주니어 개발자도 이해하는 코어 J2EE 패턴 - 학급반장편 - (0) | 2014.12.30 |
---|---|
주니어 개발자도 이해 할 수 있는 아름다운 JVM 세상 (0) | 2014.11.26 |
Java Virtual Machine, Call stack, Java Byte Code (0) | 2014.09.15 |
Software Copyright & Open Source Licenses (0) | 2014.08.18 |
이클립스와 JSmooth를 이용한 실행파일(*.exe) 만들기 (0) | 2014.07.29 |