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;
}

 


참고

https://yaboong.github.io/java/2019/01/19/java-generics-1/

반응형