Generics
: 포괄적인
컴파일 시에 타입 체크 (미리 사용할 타입을 명시해서 형 변환을 하지 않아도 된다. 이때 명시하는 형은 완전 일치해야한다.)
ex) List
GenericBox
Object
등 상위 타입의 객체에 할당하게 되면 런 타입시에 타입 체크를 하게 되며 형 변환을 해야하는 번거로움이 있다.
generic은 런타임시에는 타입이 없다.
→ Generic 을 이용해서는 배열을 만들 수 없다. (만들 수 는 있지만 타입에 대해서 안전하지 않다.)
→ 배열과 Generic은 되도록 함께 쓰지 않는다.
와일드 카드 (?)
API 의 유연함을 위해 type을 신경쓰지 않아도 되도록 무엇이든 받을 수 있는 자료형이다.
따라서 함수의 매개변수의 타입으로 사용하는데, 이때 이렇게 생성된 변수에는 set을 할 수 없는 경우도 있다.
PECS
PE: 데이터를 생산하는 역할
< ? extends >이나 <?> 등으로 함수의 매개변수로 설정하면, get만이 가능하다.
CS: 데이터를 소비하는 역할
<? super Person>로 매개변수의 타입을 설정하게 되면 최소 Person 타입이므로 Person 타입은 set 할 수 있다.