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 하위타입> : 하위 클래스 제한

해당 클래스 및 해당 클래스의 부모 클래스만이 올 수 있다.







+ Recent posts