반공변2 자바개발자가 보기에 Kotlin 에서 좋아보이는 것들 - 3 자바개발자가 보기에 Kotlin 에서 좋아보이는 것들 - 3 클래스와 객체에서 제네릭(Generics: in, out, where) 여기서는 공변, 반공변에 대한 개념이 조금 필요하다. 혹시 간단하게 알고싶다면 공변, 반공변이란 무엇일까 를 참고해보면 좋을 것 같다. 선언위치 변성 (Declaration-site variance) interface Factory { fun pop(): T fun push(t: T) // compile error } Factory 라는 클래스는 제네릭 파라미터 T 에 대해 공변(covariant) 임을 의미한다. Factory 클래스는 T 의 producer 만 가능하다고 생각할 수 있다. consumer 는 될 수 없다. 따라서 메소드 파라미터로 타입이 T 인 변수를 받.. 2022. 11. 3. 공변, 반공변이란 무엇일까 공변, 반공변이란 무엇일까 변성(Variance) 자바 제네릭은 기본적으로 불변 String 은 Object 의 서브타입이다. 하지만, List 은 List 의 서브타입이 아니다. 즉 자바의 제네릭 타입은 불변(invariant) 이다. 변성(variance)이 없다. 불변임으로 인해서 나타나는 아래 문제점을 보자. 뭔가 이상한 addAll 코드 class Collection { void addAll(Collection items) { for (E e: src) { push(e); } } } void copyAll(Collection to, Collection from) { to.addAll(from); // compile error } copyAll메소드는 컴파일에러가 발생한다. 사실 copyAll 메.. 2022. 10. 27. 728x90 이전 1 다음