개발 지식/Java
[Java] Generic 사용법
sssukho
2020. 2. 10. 23:33
반응형
Generic 이란
- 아직 타입이 정해지지 않은 데이터 타입이라고 쉽게 생각할 것.
- 주로 Java Collection에서 많이 사용된다.
Interface Generic 사용법
interface ExampleInterface<T1, T2> {
T1 test1 (T2 t);
T2 test2 (T1 t);
}
public class ExampleClass implements ExampleInterface<String, Integer> {
@Override
public String exMethod1(Integer t) {
return null;
}
@Override
public Integer exMethod2(String t) {
return null;
}
}
Method Generic 사용법
클래스에 제네릭 타입을 선언하지 않고 각 메소드마다 제네릭 타입을 선언해서 사용 가능함. 메소드의 파라미터의 T가 선언되어 있다면, 리턴타입 바로앞에 <T> 제네릭 타입을 선언해야한다.
class TestMethod {
public static <T> List<T> exampleMethod(List<T> list, T item) {
list.add(item);
return list;
}
}
WildCard Generic 사용법
- <?> : 모든 객체 자료형, 내부적으로는 Object로 인식
- <? super 객체형> : 명시된 객체자료형의 상위 객체, 내부적으로는 Object로 인식
- <? extends 객체자료형> : 명시된 객체자료형을 상속한 하위객체, 내부적으로는 명시된 객체 자료형으로 인식
class TestWildCard {
public List<? extends Object> wildMethod1() {
return new ArrayList<Long>();
}
public <T> List<? extends String> wildMethod2(T t) {
return new ArrayList<String>();
}
public List<?> wildMethod3() {
return new ArrayList<>();
}
}
Generic 사용시 주의할 점
- Generic Type으로는 전역변수(Static)을 선언할 수 없다.
- Generic Type으로는 인스턴스를 생성할 수 없다.
- 타입의 매개변수는 T 말고도 존재한다.
- E : Element
- K : Key
- N : Number
- T : Type
- V : Value
- Generic 타입이 인스턴스화 될 때, 컴파일러는 타입 파라미터와 관련된 정보를 제거한다 => 제네릭을 사용하기 이전의 라이브러리 등과 호완성을 유지하기 위함이다.
Reference : https://namjackson.tistory.com/18
반응형