우선, 자바 제네릭(Generic)이 왜 필요한지에 대해 현실세계에 빚대어 보겠습니다.

우리가 소위 핸드폰을 판다고 해보자. iPhone6일 수도 잇고, iPhone6+일수도 있고 갤럭시 s6, edge, note4, G4일수도 있습니다.

핸드폰을 파는 사람은 여러가지 모델이 아니라 하나의 모델만 판다면 구분할 필요없이 한가지 색깔, 한가지 가격을 정해놓고 판매할수가 있게 된다. 제네릭은 여러 가지 모델을 취급하게 설계 할 수 있다. 그래서 형변환과 타입체크를 할 필요가 없게되는 것이다. 



이 것을 자바세계로 끌고오면, 

<String> 제네릭은 String만, <Interger>제네릭은 Integer클래스만 사용할 수 있습니다. 

<iPhone>제네릭에는 iPhone객체만 취급할 수 있고, <GalaxyS6>제네릭은 GalaxyS6만 취급  할 수 있다는 말입니다. 

그렇지 않으면 에러가 납니다. 


제네릭은 왜 사용할까?

여러 개의 타입을 취급할 때에 형변환이 이루어지는데, 형변환은 컴파일 타임에는 에러가 나지 않는다. 제네릭을 사용하게 되면 당연히 클래스를 여러개 만들고 형변환을 할 필요가 없다는 장점과 타입체크를 할 필요가 없다는 장점이 있고 잘못된 타입이 들어가게 되면 컴파일 타임에 오류를 확인 할 수 있다.  


와일드 카드

?는 알 수 없는 타입을 뜻한다.

<?> - 모든 객체 자료형, 내부적으로 Object로 인식한다.

<? super 객체자료형> - 명시된 객체 자료형과 그 상위 객체, 내부적으로 Object로 인식한다.

<? extends 객체자료형> - 명시도니 객체 자료형과 이를 상속한 하위객체, 내부적으로는 명시한 객체 자료형을 인식한다. 


'JAVA' 카테고리의 다른 글

인스턴스 메소드 vs 클래스(스태틱) 메소드  (0) 2015.08.25
자바 Null Pointer Exception막는 방법  (0) 2015.08.18
자바 리플랙션(Reflection) API  (0) 2015.08.05
자바 해시맵(HashMap)  (0) 2015.08.05
자바 문자열  (0) 2015.07.26
Posted by slender ankles
,