Q : 제네릭에 대해 설명해주세요.
A : 자바에서 제네릭은 데이터의 타입을 일반화한다는 것을 의미합니다. 제네릭은 클래스나 메소드에서 사용할 내부 데이터 타입을 컴파일 시에 미리 지정하는 방법입니다. 이로써 제네릭은 자바의 타입 안정성을 맡고 있습니다. 컴파일 과정에서 타입체크를 해주는 기능으로 객체의 타입을 컴파일 시에 체크하기 때문에 객체의 타입 안정성을 높이고 형변환의 번거로움을 줄여줍니다.
일반적인 코드를 작성하고, 이 코드를 다양한 객체에 대하여 재사용
하는 프로그래밍 기법이다.
타입을 파라미터화해서 컴파일시 구체적인 타입이 결정
되도록 해준다.(실행시에 타입에러가 나는 거보다는 컴파일시에 미리 타입을 강하게 체크해서 에러를 사전에 방지)
public class CastingDTO<T> {
private T object;
public void setObject(T object) {
this.object = object;
}
public T getObject() {
return object;
}
}
타입 파라미터는 제네릭 클래스/인터페이스에 사용되며 타입이 정해지지 않은 파라미터이다.
자바에서는 타입 파라미터는 사용자가 임의로 지정할 수 있으나, 일반적으로 영문 대문자 한글자를 사용한다. 관례적으로 사용하는 제네릭 타입 변수명은 아래와 같다.
public class CastingDTO<T> {
private T object;
public void setObject(T object) {
this.object = object;
}
public T getObject() {
return object;
}
}
public class GenericSample {
public static void main(String[] args) {
GenericSample sample = new GenericSample();
sample.checkCastingDTO();
}
public void checkCastingDTO() {
CastingDTO<String> dto1 = new CastingDTO<>();
dto1.setObject(new String());
CastingDTO<StringBuffer> dto2 = new CastingDTO<>();
dto2.setObject(new StringBuffer());
CastingDTO<StringBuilder> dto3 = new CastingDTO<>();
dto3.setObject(new StringBuilder());
}
}