JAVA
자바 제네릭(Generics)
icedstone
2025. 3. 11. 11:01
반응형
Generics add stability to your code by making more of your bugs detectable at compile time. – Oracle Javadoc
compile time에서 버그를 감지해서 코드 안정성을 높여준다. 무슨 말인지 조금 더 이해를 해보기 위해 generics가 없다고 생각하고 소스를 구현해보자. (jdk 1.5 이전에는 없었다.)
public Object method(Object obj) {
return obj;
}
public void execute() {
String str1 = (String) method("this is test");
String str2 = (String) method(1234);
}
당연히 java.lang.ClassNotFoundException 이 발생한다. 하지만 이걸 인지하는 시점은 runtime 시간이다. 만약에 generics를 이용해서 코딩을 했다면
public <T> method(T t) {
return t;
}
public void execute() {
String str1 = method("this is test");
String str2 = method(1234);
}
당연하게도 compile이 되지 않는다. 오류를 빨리 확인할 수 있고 그만큼 코드의 안정성은 높아지게 된다.
반응형
그렇다면 다음과 같은 소스는 어떨까?
public class GenericClass<T> {
public static void test(T t){}
}
T가 결정되는 시점은 GenericClass가 생성되는 시점인데 static method는 GenericClass가 생성되기 전에 호출이 가능하기 때문에 이 경우에도 compile 오류가 발생하게 된다.
만약 static method인데 generic이 필요한 경우에는 method가 호출되는 시점에 type을 알 수 있게 구현해줘야한다.
public static <T> T genericMethod(T t) {
return t;
}
참고
반응형