반응형
✔️ static 메서드에 generic 사용이 가능할까?
결과를 먼저 보자면 가능합니다.
static은 공유 자원이기 때문에 메서드의 매개변수에 generic 사용이 불가능 할 것이라
생각할 수 있지만, 아닙니다.
저는 그렇게 생각이 들었습니다. 공유를 하는데 매번 매개변수가 바뀐다고??
라고 단순히 생각했습니다.
하지만 조금 더 생각 해보면 아니라는 것을 알 수 있습니다.
공유를 하던 안하던 전혀 무관한 내용입니다.
클래스의 타입 매개변수와 메서드의 타입 매개변수를 이해하면 됩니다.
클래스의 타입 매개변수는 class A<T>
과 같이 선언 합니다.
이는 인스턴스 변수로 인식됩니다. 즉, static에서는 당연히 사용할 수가 없습니다.
하지만 메서드의 타입 매개변수는 static<T> void test(T a) {};
와 같이 선업합니다.
이는 지역 변수로 인식됩니다. 지역 변수이므로 generic으로 사용이 가능하게 됩니다.
static인지 아닌지는 전혀 중요하지 않습니다.
한 가지 더 중요한 점은 인스턴스 변수와 지역 변수의 차이이기 때문에
클래스 타입의 매개변수와 메서드의 타입 매개변수는 같이 이름을 사용하여도 전혀 다른 변수로
취급 됩니다. 아래 코드와 같이 인스턴스, 지역 변수의 차이가 있기 때문입니다.
class A {
int a = 0;
public void sum(int a, int b) {
this.a = a + b;
}
}
반응형
'Java' 카테고리의 다른 글
Java로 자료구조 이해하기 2편(Arraylist와 LinkedList) (0) | 2021.10.02 |
---|---|
Java Serializable (0) | 2021.10.02 |
java로 쿠키와 세션 이해하기 (0) | 2021.10.02 |
Java로 자료구조 이해하기 1편(Array와 ArryaList의 차이점) (0) | 2021.09.30 |
StringBuilder, StringBuffer와 String 차이 (0) | 2021.05.15 |