변성(Variance)

youngkyu MIn·2023년 10월 9일

변성은 Java 프로그래밍 언어에서 제네릭 타입들이 서로 어떻게 관련되어 있는지를 설명하는 용어다.
변성은 크게 공변성(Covariance), 반공변성(Contravariance), 그리고 무변성(Invariance)의 세 가지 유형이 있다.

1 공변성 (Covariance)

공변성은 하위 타입의 관계를 유지한다.
즉, Sub가 Super의 하위 타입일 때, Generic 또한 Generic의 하위 타입으로 간주한다.
Java에서는 extends 키워드를 사용하여 공변성을 표현한다.

List<? extends Number> numbers = new ArrayList<Integer>();

2 반공변성 (Contravariance)

반공변성은 상위 타입의 관계를 유지한다.
즉, Sub가 Super의 하위 타입일 때, Generic가 Generic의 하위 타입으로 간주된다.
Java에서는 super 키워드를 사용하여 반공변성을 표현한다.

List<? super Integer> numbers = new ArrayList<Number>();

3 무변성 (Invariance)

무변성은 타입 관계를 유지하지 않는다.
즉, Sub가 Super의 하위 타입일지라도 Generic와 Generic 사이에는 어떤 상속 관계도 없다.

List<Integer> integerList = new ArrayList<Integer>();
List<Number> numberList = integerList;  // 컴파일 에러
profile
한 줄 소개

0개의 댓글