Java 제네릭

Java 제네릭


  • 제네릭은 클래스, 인터페이스, 메소드를 정의할 때 타입을 파라미터로 사용할 수 있도록 한다.
  • 컴파일 시 강한 타입 체크를 할 수 있다.
  • 타입 변환을 제거한다.

제네릭 사용방법

  • 타입
타입 설명
<T> Type
<E> Element
<K> Key
<V> Value
<N> Number
  • 클래스, 인터페이스 선언
// 클래스 선언
public class 클래스명 <T> { ... }
// 인터페이스 선언
public interface 인터페이스명 <T> { ... }
// HashMap 선언
public class HashMap <K, V> { ... }
  • 선언한 제네릭 클래스 사용
    • 객체를 생성할 때 구체적인 타입을 명시해 준다.
public class ClassName <T, K> { ... }
 
public class Main {
    public static void main(String[] args) {
    	ClassName<String, Integer> a = new ClassName<String, Integer>();
    }
}
// 이와 같이 사용자가 정의한 클래스도 참조타입으로 넣을 수 있다.
public class ClassName <T> { ... }
 
public class Student { ... }
 
public class Main {
	public static void main(String[] args) {
		ClassName<Student> a = new ClassName<Student>();
	}
}

제한 된 제네릭과 와일드카드

  • 선언한 제네릭을 특정 범위 내로 제한하고 싶을 때 사용하는 방법
  • extends, super, ?(알 수 없는 타입)

<K extends T>	// T와 T의 자식 타입만 가능 (K는 들어오는 타입으로 지정 됨)
<K super T>	// T와 T의 부모 타입만 가능 (K는 들어오는 타입으로 지정 됨)
 
<? extends T>	// T와 T의 자식 타입만 가능
<? super T>	// T와 T의 부모 타입만 가능
<?>		// 모든 타입 가능. <? extends Object>랑 같은 의미

태그:

카테고리:

업데이트: