목차
지네릭스란?
다양한 타입의 객체들을 다루는 메소드나 컬렉션 클래스에 컴파일 시 타입 체크를 해주는 기능
지네릭스 장점
지네릭스 적용 전 vs 후
지네릭스 문법
class Box<T> { }
Bob<T> : 지네릭 클래스 (‘T의 Box’ 또는 ‘T Box’)
T : 타입 변수 또는 타입 배개변수 (T는 타입 문자)
Box : 원시 타입 (raw type)
Box<String>과 Box<Integer>은 별개의 클래스가 아니다, 단순히 서로 다른 타입을 대입해서 호출을 뿐이다. (컴파일 후, Box<String>과 Box<Integer>은 지네릭 타입이 제거되어 원시 타입인 Box로 바뀐다.)
자주 쓰이는 타입
타입 | 설명 |
<T> | Type |
<E> | Element |
<K> | Key |
<V> | Value |
<N> | Number |
두 개 이상의 지네릭 타입
지네릭 타입은 여러개를 지정해 줄 수 있다.
예시
제한된 지네릭 클래스
특정 타입과 그 자손들만 대입 할 수 있게 제한하는 지네릭 클래스
제한된 지네릭 클래스 문법
class SmartTv<T extends Tv> { // TV와 그 자손만 타입으로 지정 가능
ArrayList<T> list = new ArrayList<T>();
}
Java
복사
인터페이스를 구현하는 경우에도 extends 를 사용한다.
클래스와 인터페이스를 동시에 상속하려면 ‘&’ 기호로 연결하여 사용한다.
코드 예시
지네릭 메소드
메소드 하나에 대해 지네릭으로 정의
Class BoxFactory {
public static <T> Box<T> makeBox(T o) {
Box<T> box = new Box<T>(); // box 생성
box.set(o);
return box;
}
Java
복사
지네릭 메소드의 T는 메소드 호출 시점에 결정한다.
예시