Generics (1)

roglog·2021년 7월 15일
0

java의 정석

목록 보기
33/36

1. Generics란


  • 다양한 타입의 객체들을 다루는 메서드나 컬렉션 클래스에 컴파일 시의 타입 체크를 해주는 기능
  • 객체의 타입을 컴파일 시에 체크하기 때문에 객체의 타입 안정성을 높이고 형변환의 번거로움이 줄어듬.
    즉, 다룰 객체의 타입을 미리 명시해줌으로써 번거로운 형변환을 줄여줌

2. Generic클래스의 선언


  • 클래스 옆에 ' < T > '를 붙이면 됨 (T: 타입변수)
    여러개인 경우에는 콤마를 구분자로 나열
    Ex) Map<K, V>

  • 지네릭클래스의 객체를 생성할 때는 참조변수와 생성자에 실제 타입을 지정해주어야 함
    Ex)

      class Box<T> {
          T item;

          void setItem(T item) { this.item = item; }
          T getItem( ) { return item; }
      }
      
      Box<String> b = new Box<String> ( );
      
      // 위처럼 선언시 아래와 같이 됨
      
      class Box {
        String item;

        void setItem(String item) { this.item = item; }
        String getItem( ) { return item; }
      }

1) 지네릭스의 용어

class Box < T > { }

  • Box: 지네릭 클래스. 'T의 Box'또는 'T Box'라고 읽음
  • T: 타입 변수 또는 타입 매개변수.
  • Box: 원시 타입(raw type)

2) 지네릭스의 제한

  • static멤버에 타입변수 T를 사용할 수 없음(T는 인스턴스변수로 간주되기 때문, static멤버는 인스턴스 참조 불가)

  • 지네릭 타입의 배열 생성 불가
    Ex) T [ ] tmpArr = new T [itemArr.length];
    (하지만 지네릭 배열 타입의 참조변수를 선언하는 것은 가능
    T [ ] itemArr;)

    • 이유: new 연산자는 컴파일 시점에 타입 T가 뭔지 정확히 알아야 한다. 하지만 Box< T >클래스를 컴파일하는 시점에서는 T가 어떤 타입이 될지 전혀 알 수 없다.
      (같은 이유로 instanceof연산자도 사용불가

java의 정석 chapter12

profile
Full Stack Developer 📚

0개의 댓글