Java 제네릭(Generic) 타입
- Java API Document를 보면 많은 제네릭 타입을 사용하고 있으므로 이를 이해하고 있어야만 정확히 이해하고, 사용할 수 있다.
https://docs.oracle.com/javase/8/docs/api/
- 제네릭 타입은 "<>" 부호를 사용하며 타입을 인수로 받을 수 있도록 한다.
- 제네릭 타입을 사용함으로써 타입 검사를 강화함으로써 에러를 줄일 수 있다.
또한, 캐스팅(타입 변환)을 없애주므로 성능을 향상시킬 수 있다.
결과
결과
코드
package pk;
public class Test<T, S> {
T num;
S[] count;
public Test(T n, int size) {
this.num = n;
this.count = (S[]) new Object[size];
}
void getC() {
System.out.print(num + ". ");
for(S i : count) {
System.out.print(i + " ");
}
System.out.println();
}
public static void main(String[] args) {
Test<Integer, String> t = new Test<Integer, String>(1, 3);
Test<Integer, Integer> t2 = new Test<>(3, 4);
t.getC();
t2.getC();
}
}
- 제네릭 타입은 클래스<T, S> 이렇게 쓰곤 한다. (보통 대문자로 표기한다.)
- 제네릭 타입은 멤버 변수 타입을 지정하거나 메소드 리턴형을 지정할 때나 다 사용할 수 있다.
- 21라인 : int형을 지정하고자 하면 Integer를 사용해야 한다.
- 9라인 : 제네릭 타입 배열을 초기화 해줄 때는 Object 객체형으로 생성한 후 강제 형변환으로 변환해주어야 한다.
(Object는 모든 객체의 최상위 부모이다.)
- 22라인 : 뒤쪽을 보면 21라인과 달리 "<>" 속 값을 생략할 수도 있다.
제네릭 타입 제한
- 제네릭 타입<?> : 모든 클래스나 인터페이스가 올 수 있다.
- 제네릭 타입<? extends 클래스> : 상위 클래스 제한
해당 클래스 및 해당 클래스의 자식 클래스만이 올 수 있다.
- 제네릭 타입<? super 하위타입> : 하위 클래스 제한
해당 클래스 및 해당 클래스의 부모 클래스만이 올 수 있다.
'JAVA > 심화' 카테고리의 다른 글
Java HashSet - 집합 삽입, 삭제, 탐색 (0) | 2020.04.09 |
---|---|
Java List Collection - ArrayList, LinkedList, Vector (0) | 2020.04.01 |
Java 시간 차 구하기 ChronoUnit (0) | 2020.03.28 |
Java 날짜와 시간 얻기 LocalDate, LocalTime (0) | 2020.03.27 |
Java Pattern 문자열 검증하기 (0) | 2020.03.27 |