카테고리 없음

Java 정리 - 6 (Generics)

cheesecrust1008 2025. 2. 4. 20:43

Generics

: 포괄적인

컴파일 시에 타입 체크 (미리 사용할 타입을 명시해서 형 변환을 하지 않아도 된다. 이때 명시하는 형은 완전 일치해야한다.)

ex) List example = new List<>();

GenericBox 과 GenericBox 은 상속관계에 있지 않다.

Object 등 상위 타입의 객체에 할당하게 되면 런 타입시에 타입 체크를 하게 되며 형 변환을 해야하는 번거로움이 있다.

generic은 런타임시에는 타입이 없다.

→ Generic 을 이용해서는 배열을 만들 수 없다. (만들 수 는 있지만 타입에 대해서 안전하지 않다.)

→ 배열과 Generic은 되도록 함께 쓰지 않는다.

와일드 카드 (?)

API 의 유연함을 위해 type을 신경쓰지 않아도 되도록 무엇이든 받을 수 있는 자료형이다.

따라서 함수의 매개변수의 타입으로 사용하는데, 이때 이렇게 생성된 변수에는 set을 할 수 없는 경우도 있다.

PECS

PE: 데이터를 생산하는 역할

< ? extends >이나 <?> 등으로 함수의 매개변수로 설정하면, get만이 가능하다.

CS: 데이터를 소비하는 역할

<? super Person>로 매개변수의 타입을 설정하게 되면 최소 Person 타입이므로 Person 타입은 set 할 수 있다.