본문 바로가기
IT/Java

Generic 제너릭

by Jeami 2013. 6. 25.
반응형



Java Generic 자바 제너릭


클래스를 사용할 떄 그 타입을 보통은 미리 정해주게 됩니다. 반면 제너릭이란 것은 클래스를 생성해줄 때 사용하는 것이 아니라 클래스를 사용할 때 지정해주는 것을 의미합니다.

아래와 같이 사용할 수 있겠습니다.





추천은 블러거에게 큰 힘이 됩니다. 로그인 없이 아래의 손가락 버튼 한번만 눌러주시면 감사하겠습니다^^

class Kor{

private Object data ;

public void setData(Object data) {

this.data = data ;

}

public Object getData() {

return this.data ;

}

}  //class END

----------------------------------------------------------------------------

Object형은 타입에 관계없이 어떠한 형이라도 모두 할당할 수 있는 장점이 있습니다. 따라서 아래와 같이 위의 클래스를 사용할 수 있겠습니다.

--------------------------------------------------------------------------------

String str = "Object Type 유형" ;

Kor K = new Kor() ;

K.setData(str) ;

String des = (String)K.getData() ;

----------------------------------

setData() 메소드의 매개변수로 String형을 넘겨주었지만, 클래스내에서 Object형으로 업캐스팅이 일어나기 때문에 String형이라는 Type을 잃어버리게 됩니다. 따라서 getData()를 호출했을 때, 리턴되는 Type이 Object형이 되는 것입니다. 

이런 이유로 getData()를 호출한 후 원하는 Type으로 업캐스팅 해줍니다.



이제 본격적으로 Generic을 사용하는 원리에 대해 예를 들어 말씀드릴게요.

class Trau<T> {

private T data ;

public void setData( T data ) {    this.data = data ;   }

public T getData() {    return this.data ;  }

}

-----------------------------------------

위의 클래스에서 T의 Type은 명시되어 있지 앖습니다. data참조변수의 형태가 무엇인지 알수 없는 것입니다.

Trau<T> ==> class 생성시점인 지금은 알수없는 Type의 T가 존재한다는 의미입니다.

이제 "T"라는 객체를 생성해보도록 하겠습니다.

----------------------------------------

String str1 = " Exam Generic 사용 " ;

Trau<String> a = new Trau<String>() ;

a.setData(str) ;

String str2 = a.getData() ;

-------------------------------------

Trau Type의 T 를 String Type으로 지정한 후 a 라는 인스턴스를 생성했습니다. 이렇게 객체를 사용해주는 시점에서 Type을 지정해주는 것이 Generic의 대표적인 사용방법이라고 볼 수 있습니다.



기본적인 내용입니다.

하지만 역시나 응용하면서부터는 꽤나 복잡해지는 내용입니다. 원리를 이해하신 후 "이렇게 사용하는구나" 정도만 감으로 익히시고, 나중에 어플리케이션에서 어떻게 또 사용되는지 살펴보시면 될 것 같습니다. 

처음부터 자바의 모든 내용을 100% 이해하고 넘어가야만 한다는 생각보다 같은 부분을 여러번 본다는 생각과 한번으로 끝내자가 아니라 여러번 반복해서 보자는 마음으로 차근히 살펴보신다면 분명 도움이 될 거라고 생각합니다^^



반응형

'IT > Java' 카테고리의 다른 글

Interface(인터페이스)  (0) 2013.07.01
Java의 Generic(제너릭) 원리(간단정리)  (0) 2013.06.25
Java 다차원 배열  (0) 2013.06.24
Java 배열 매개변수  (0) 2013.06.23
This()  (0) 2013.06.23

loading