출처 : http://take0415.blog.me/60128721068
 

public class Sample2 {
public Sample2() {
}

public static void main(String[] args) {
Tmp<String> tmp1 = new Tmp<String>();
tmp1.setTmp(" s t r i n g ");
System.out.println(tmp1.getTmp());

Tmp<Integer> tmp2 = new Tmp<Integer>();
tmp2.setTmp(1);
System.out.println(tmp2.getTmp());
}
}

class Tmp<T> {
private T tmp = null;

public T getTmp() {
return tmp;
}

public void setTmp(T tmp) {
this.tmp = tmp;
}
}

이런 야리꾸리한 허접스런 티가 나는 클래스가 있다고 치자.

언듯 생각하면 제네릭의 원리는 컴파일러가 내부에서 Tmp<Integer> 와 Tmp<String> 의 각각의 클래스를 생성했을 것도 같지만
이렇게 되면 만약 여러개의 형을 사용했을 때 계속해서 코드는 증가하고 형 또한 증가할 것이다.

자바의 컴파일러는 제네릭을 만났을 때 아예 삭제 시켜 버리고 캐스팅이 필요한 곳에 캐스팅을 추가하는 방식으로 되어 있다.

예를 들자면

Tmp<String> tmp1 = new Tmp<String>();
tmp1.setTmp(" s t r i n g ");
System.out.println(tmp1.getTmp());

이 부분이

Tmp tmp1 = new Tmp();
tmp1.getTmp(" s t r i n g ");
(String) tmp1.getTmp();

[출처] 자바의 Generic의 원리|작성자 정서

'자바 > 자바팁' 카테고리의 다른 글

자바 압축 관련 정보  (0) 2012.01.10
JSP 및 JAVA로 오직 POST 방식으로 받을때  (0) 2011.12.13
SWT Deginer 사용하기  (0) 2011.11.02
AD인증 자바코드  (0) 2011.11.02
AD(ldap) 테스트용 Java 코드  (0) 2011.11.02

+ Recent posts