제네릭(Generic)
•
일반적인, 범용적인이라는 영어 단어 뜻
•
특정 타입에 속한 것이 아니라 일반적으로, 범용적으로 사용할 수 있다는 뜻
제네릭 타입(Generic Type)
•
클래스나 인터페이스르 정의할 때 타입 매개변수를 사용하는 것
•
제네릭 클래스, 제네릭 인터페이스를 모두 합쳐서 제네릭 타입이라 한다.
•
Ex)
class GenericBox<T> {
private T t;
}
Java
복사
여기에서 GenericBox<T>를 제네릭 타입이라 한다.
타입 매개변수(Type Parameter)
•
제네릭 타입이나 메서드에서 사용되는 변수로, 실제 타입으로 대체된다.
•
ex) GenericBox<T>
•
T를 타입 매개변수라 한다.
타입 인자(Type Argument)
•
제네릭 타입을 사용할 때 제공되는 실제 타입이다.
•
ex) GenericBox<Integer>
•
Integer를 타입 인자라 한다.
•
기본형(inte, double, …)은 사용할 수 없다. 대신에 래퍼 클래스(Integer, Double)를 사용
제네릭 명명 관례
•
일반적인 변수명처럼 소문자로 사용해도 문제는 없음
•
일반적으로 대문자를 사용하고 용도에 맞는 단어의 첫글자를 사용하는 관례를 따름
주로 사용하는 키워드
E - Element
K - Key
N - Number
T - Type
V - Value
S,U,V etc. - 2nd, 3rd, 4th types
타입 추론
GenericBox<Integer> integerBox = new GenericBox<Integer>(); // 타입 직접 입력
GenericBox<Integer> integerBox2 = new Generic<>(); // 타입 추론
Java
복사
•
자바 컴파일러가 타입을 추론할 수 있는 상황에만 가능. (읽을 수 있는 타입 정보가 주변에 있어야 추론할 수 있음)
제네릭의 타입 매개변수와 타입 인자
메서드의 매개변수는 사용할 값에 대한 결정을 나중에 미루는 것이고, 제네릭의 타입 매개변수는 사용할 타입에 대한 결정을 나중으로 미루는 것이다.
•
메서드는 매개변수에 인자를 전달해서 사용할 값을 결정한다.
•
제네릭 클래스는 타입 매개변수에 타입 인자를 전달해서 사용할 타입을 결정한다.