제네릭이란?
사전적 의미 : 포괄적인, 통칭의
클래스 내부에서 사용할 데이터 타입을 외부에서 지정하는 기법. 인스턴스를 생성 할 때 정의하는 기법.
매개 변수의 데이터 타입과 관련이 있음.
Class Person<T> {
public T info;
}
Person 클래스를 인스턴스 화 할 때 데이터 타입을 정의 해주는 것
ex ) Person<String> p1 = new Person<String>();
Person<StringBuilder> p2 = new Person<StringBuilder>();
T, S에 올 수 있는 데이터 타입은 참조형 타입만 올 수 있음. 기본 데이터 타입은 Wrapper 클래스를 통해서 이용.
메소드 레벨의 제네릭
public <U> void printInfo(U info) {
System.out.println(info);
}
U가 info의 제네릭 타입임을 명시해줌.
사용시에는 p1.<U>printInfo(data); // 하지만 생략 가능.
제네릭의 제한
class Person<T extends Info> {}
Info 클래스 혹은 Info 클래스를 상속 받고 있는 자식 클래스만 들어 올 수 있음 > 아닌 경우 컴파일 에러.
인터페이스로 제한 가능하지만 <T impelments Info> 이런 식으로 사용하는 것이 아니라 그대로 <T extends Info>로 사용.
제네릭으로 디자인된 클래스 사용 구문
ArrayList<String> list = new ArrayList<String>();
제네릭의 특징
1. 클래스 내부에서 사용하는 타입을 다이아몬드 지시자로 받을 수 있다.
2. 명확하지 않는 형 변환 과정을 생략 할 수 있다.
ArrayList<String>과 같은 명시적인 표현을 통해서 ArrayList 객체 내부에 어떤 형태의 클래스가 있는지 확인 가능하므로 불필요한 형 변환 코드 사용을 줄이고 오류를 줄일 수 있음.
3. 하나의 클래스로 다양하게 처리 할 수 있다.
제네릭이 존재하지 않았다면 StringArrayList, IntegerArrayList와 같이 각각의 데이터 타입을 제공하는 ArrayList 클래스가 필요 했을 것. 코드의 재사용이 용이하다.
Hashtable<String, String> hashTable = new Hashtable<String, String>(); // 여러 개의 타입 변수 받을 수 있음.
와일드 카드 (E, K, V, T, N ..)
참고 :
생활코딩 자바 제네릭
자바를 다루는 기술, 길벗
'JAVA' 카테고리의 다른 글
단위 테스트를 위한 JUnit 사용해보기 with Eclipse (0) | 2020.04.14 |
---|---|
자바 스레드(Thread) 수정 중 (0) | 2020.04.14 |
카카오톡 로그인 REST API, HttpClient 통해 이용해보기 (0) | 2020.04.10 |
java.lang.ClassNotFoundException : org.apache.http.HttpEntity / HttpClient 이용 시 (0) | 2020.04.09 |
HttpClient 클래스를 이용해서 REST API 사용하기 (1) | 2020.04.04 |
댓글