라벨이 반공변성.인 게시물 표시

Kotlin 가변성

Kotlin 가변성 불변성 : 제너릭이 설정된 객체의 주소 값을 같은 타입의 제네릭이 설정된 변수에만 담을 수 있다. 공변성 : 제네릭이 설정된 객채의 주소 값을 부모 클래스 타입의 제네릭이 설정된 변수에도 담을 수 있다. 반 공변성 : 제네릭이 설정된 객체의 주소 값을 자식 클래스 타입의 제네릭이 설정된 변수에도 담을 수 있다. 불변성(무변성)  불변성 (Invariant): 기본적으로 제네릭 타입은 불변성입니다. 불변성은 타입 간에 하위 타입 관계가 없음을 의미합니다. 즉, List<String>은 List<Any>의 하위 타입도 상위 타입도 아닙니다. 이는 제네릭 타입이 완전히 독립적으로 동작하고 서로 호환되지 않는 것을 의미합니다. fun main () { var obj1:TestClass1<SubClass1> = TestClass1<SubClass1>() var obj2:TestClass1<SubClass2> = TestClass1<SubClass1>() // ERROR } open class SuperClass1 open class SubClass1 : SuperClass1() class SubClass2 : SubClass1() class TestClass1< T >() Kotlin: Type mismatch: inferred type is SubClass1 but SubClass2 was expected Kotlin: Type mismatch: inferred type is TestClass1<SubClass1> but TestClass1<SubClass2> was expected  클래스가 상속 관계 이더라도, 타입에는 하위 관계가 없기 때문에, 동일한 타입을 사용해야 한다. 이러한 오류는 주로 제네릭 클래스나 함수를 다룰 때 발생하며, 기대하는 제네릭 타입 매개변수와 다른 타입의 값을 할당하려고 할 때 발생한다. 공변...