지네릭스 (Generics)

  • 컴파일이 타입을 체크해주는 기능 (compile - time type check) - JDK1.5

    ClassCastException : 형변환 에러 (실행시발생하는에러)
    컴파일에러가 더낫다 > 실생시발생에러를 어떻게 컴파일에러 단으로 끌고올수있을까 ?

  • 실행시발생할에러를 > 컴파일러에서 에러를 뜨게할수있게 하는게 지네릭스
  • 형변환생략가능 , 코드 간결가능
  • 타입체크 안정성 up,
타입변수
  • 클래스를 작성할때 , Object 타입 대신 타입변수(E) 를 선언해서 사용
    일반적으로 타입변수는 E, 엘리먼트 (배열의요소) or T Type
  • 객체 생성시 ,실제타입을 예 <>를 지정되면 형변환생략가능
다형성
  • 참조변수 의 <> 타입과 생성자 의 <>타입이 일치해야함// JDK1.7부터 생성자에 타입지정생략가능
  • 조상이여도 타입이안맞으면 자손사용못함

지네릭 클래스

  • 인터페이스인(Eatable) 경우에도 exntends 를 사용 // implements X
  • 지네릭 클래스에 선언되면 static메서드에서 사용불가 // static메서드 자체에 선언된 것은 가능합니다. iv와 lv의 차이와 비슷하죠. 같은 이름이어도 전혀 다른 것들이죠.

지네릭의 제약

  • 타입변수에 대입은 , 인스턴스별로 다르게가능

  • static멤버에 X // static은 모든 인스턴스에 공통이니까

  • 타입변수<>로 배열선언만가능; // 객체,배열생성 X new 연산자다음에 T 불가 new 다음 <>뭐가올지아직안정해짐

앞의 동사로 ,변수명으로 어떤 무슨기능구현해놨는지 ,파악하자

와일드카드 <?>

  • 서로다른 타입이대입된 지네릭 객체를다루기위한것
  • <? extends T> 자손가능
  • <? super T> 부모가능
  • <?> // 제한없음 <와 >

지네릭 메서드

  • 호출할때마다 다른타입대입 할수있게하는것
  • 지네릭 클래스의 타입변수 <> 와 ,다른타입변수..( 값은 같아도 ,달라도 된다)
  • 이유는 스태틱메서드 내에서 고정된 LV 니까

  • 메서드 호출시 타입<>대입해야함 (<>대부분생략가능) // 에러시 클래스, this. 넣으면됨
  • Juicer.<Fruit >makeJuice(fruitbox);

지네릭 타입의 형변환

  • 지네릭 타입과 원시 타입 서로 형변환가능하지만 , 권장하지않는다 (추후에러가능)
  • 지네릭 타입들끼리는 형변환안됨
  • 와일드카드<>지네락타입은 형변환가능

지네릭 타입의 제거

  • 컴파일러가 알아서 지네릭타입을제거 , 필요한곳에 알아서 형변환 // 하위호환성땜에 / C#은 반대 ;
  • 지네릭 타입의 경계제거

Categories:

Updated:

Leave a comment