ch.14 제네릭

09Roalwlzm01·2022년 10월 29일

Java

목록 보기
12/15









제네릭이란

  • 컴파일시 타입을 체크 해주는 기능
  • 객체의 타입 안정성을 높이고 형변환의 번거로움을 줄여줌
    • 안정성
    • 타입체크와 형변환을 생략할 수 있으므로 코드 간결

제네릭 클래스의 선언

  • 클래스를 작성할 때, Object타입 대신 T와 같은 타입 변수를 사용
class Box{
	Object item;
    void setItem(Object item) { this.item = item; }
    Object getItem() {return item;}
}
class Box<T>{
	T item;
    void setItem(t item) { this.item = item;}
    T getItem() {return item;}
 }
  • 참조변수, 생성자에 T대신 실제 타입을 지정하면 형변환 생략 가능
    • Box< String > b = new Box< String >();

제네릭의 용어

  • Box< T > : 제네릭 클래스 'T의 box' 또는 'T box'라고 읽는다.
  • T : 타입 변수 또는 타입 매개변수
  • Box : 원시 타입, raw Type
class Box< T >

제네릭의 제약사항

  • static을 허용하지 않습니다.

제네릭 클래스의 객체 생성과 사용

  • 제네릭 클래스 Box< T >의 선언 (위 참조)
  • Box< T >의 객체 생성. 참조 변수와 생성자에 대입된 타입이 일치
    - Box< Apple > appleBox = new Box< Apple >()
    • Box< Apple > appleBox = new Box< Grape >() //에러
  • 두 제네릭 클래스가 상속관계이고, 대입된 타입이 일치 는 허용
    - Box< Apple > appleBox = new FruitBox< Apple >();
    • Box< Apple > appleBox = new Box<>() // 생략가능 jdk 1.7부터
  • ㅁㄴㅇ
    - Box< Apple > appleBox = new Box< Apple >();
    • appleBox.add(new Grape()) // 타입에러 컴파일 에러

제한된 제너릭 클래스


와일드 카드 '?'

  • 제너릭 타입에 와일드 카드를 쓰면, 여러 타입을 대입 가능
  • 단, 와일드 카드에는 <? extends T & E> & 쓰는 건 불가
    ` < ? extends T

0개의 댓글