본문 바로가기

프로그래밍/JAVA

[JAVA] 제너릭(Generic)

제너릭(Generic) 파트는 오픈튜토리얼(helloworld)에서 강의한 내용을 바탕으로 작성했습니다.

(http://tryhelloworld.co.kr/courses/%EC%9E%90%EB%B0%94-%EC%A4%91%EA%B8%89/lessons/generic)

4.1 이후부터는 자바의 정석(남궁성 저) 책을 이용해 내용을 작성했습니다.



처음에 자바 기본문법 공부 없이 안드로이드를 공부할 때 꺽쇠 모양 <>이 나와서 당황했다.

'이게 맞는 존재하는 문법인가? 안드로이드에만 있는 문법인가?' 싶었다.


알아보니까 꺽쇠 모양 <>는 '제너릭(Generic)'을 뜻하는 거였다. 

사실 없어도 상관없지만, '타입 안정성''코드 간결화'때문에 쓰인다.


좀 더 자세한 내용은 아래에서 살펴보도록 하자.


box 클래스를 생성

setObj 메서드로 Object 타입이면 다 받는다.

getObj 메서드로 Object 타입을 리턴한다.


BoxExam 클래스를 생성하고, 위에서 만들었던 box 클래스를 이용한다.



제네릭은 JDK1.5 이후부터 다양한 타입의 객체를 다루는 메서드나 컬렉션 클래스에 컴파일 시의 타입체크를 해주는 기능이다.



box클래스를 위와 같이 변경한다.



가장 큰 차이점은 형변환이 필요 없다는 거다. 자동으로 제너릭이 해준다.

왼쪽 코드는 괄호를 이용해 (String)으로 형변환 해주고 있다.

반면 오른쪽 코드는 형변환을 생략할 수 있다. Generic의 기능이다.


여기서 조상-자손의 개념이 들어간다.

잘 모른다면 (http://whatisthenext.tistory.com/34)의 참조변수의 형변환 파트를 보도록 하자.


자손은 조상을 참조할 때 형변환을 생략할 수 있다.

최고존엄조상 타입 Object는 자손타입을 참조할 때 형변환을 생략할 수 없다.


4.1 ArrayList<E>


위 코드에서는 꺽쇠 모양 안에 String이라던가, Integer와 같은 우리가 흔히 볼 수 있는 객체 타입을 썼다.

하지만 ArrayList <TV> 와 같은 사용자가 원하는 객체 타입의 기입이 가능하다.


ArrayList<Tv>를 사용한 모습

Tv와 Audio가 Product의 자손이다. 조상타입으로 저장된 자손을 참조하려면 형변환 (Tv)를 해줘야 한다.






'프로그래밍 > JAVA' 카테고리의 다른 글

[JAVA] 쓰레드(Thread) 1편  (0) 2016.11.02
[JAVA TIP] 글자크기 바꾸기, 음영처리 바꾸기  (0) 2016.11.01
[JAVA] 배열(array)  (0) 2016.09.03
[jAVA] 랜덤(Random) 클래스  (0) 2016.09.03
[JAVA] 캘린더(Calendar)  (0) 2016.08.31