반공변성 질문드립니다.
114
10 asked
Cage4 클래스로 반공변성 설명해주시는 부분에 실제 사용 예제가 없는 것 같습니다.
혹시 다른 곳처럼 예시코드 부탁드려도 될까요?
Answer 3
0
아하~ Cage4를 이용한 예시가 궁금하셨군요! 🙂
class Cage4<T> {
private val animals: MutableList<T> = mutableListOf()
fun put(animal: T) {
this.animals.add(animal)
}
}Cage3와 다르게 역으로 Cage4<GoldFish> 타입의 변수에 Cage4<Fish> 타입의 변수를 assign 할 수 있는지를 생각해보시면 좋을 것 같습니다.
현재 Cage4 <T> 에는 반공변성 지시어인 in 이 없기 때문에
val fishCage = Cage4<Fish>()
fishCage.put(Carp("잉어"))
val goldFishCage: Cage4<GoldFish> = fishCage아래 코드는 당연히 에러가 날거에요! Cage4<Fish> 와 Cage4<GoldFish> 는 다른 타입이니까요 🙂
하지만 만약 in 을 추가해주면~ Cage 입장에서는 내부 T 타입을 받기만하기 때문에 Fish Cage에 GoldFish가 들어와도 사실은 문제가 없고~ 따라서 위 코드의 에러가 사라지게 될거에요!
공변 / 반공변이 상당히 어려운 개념이라 이런게 있구나~ 정도로 이해하시고 실제 실무 환경에서 라이브러리나 프레임워크를 열어볼 때 어떤 코드에 어떻게 적용되어 있는지 관찰하시면 조금 더 이해도를 높이실 수 있을거에요!! 감사합니다~!!!
0
안녕하세요! 🙂 데이터를 소비만 하는 반공변한 클래스의 대표적인 예시로는
Comparable이 있습니다. Comparable<in T> 처럼 in 지시어를 사용한 반공변 인터페이스이고요! 함수 역시 T 타입을 받기만 하고 있습니다. (반환 타입에 T가 있는게 아니라 매개변수 쪽에만 T가 있죠)

답변이 도움이 되었으면 좋겠습니다. 감사합니다. 🙇
싱글턴패턴
0
3
1
KType 관련 Kotlin 2.3 변경점
1
61
2
Kotlin 2.0(K2 컴파일러)에서 달라진 Java SAM 변환 동작
2
98
3
SuperTypeSafeCage에 대해 질문드립니다
0
62
2
좋은 코드 예시
0
94
2
val 키워드도 setValue가 있나요?
0
86
2
[23강] SuperTypeToken의 equals 관련 질문
1
96
2
23강 타입 안전 이종 컨테이너 예제 관련 문의 드립니다.
0
111
2
abstract class Fish(name:String):Animal(name)
0
105
2
지식공유자님 inline에 대해서의 질문과 추가적인 질문 1가지가 있습니다!
1
118
1
안녕하세요 JMH 설정 관련 팁을 드릴까 합니다! (24년 12월 16일 기준)
0
164
2
Generic Func 질문이 있습니다
1
104
1
2강부터 영상 재생이 안되네요ㅠㅠ
0
152
2
by lazy 블럭 안에서 suspend 함수의 결과값을 받는게 가능한가요?
0
389
1
DSL 만들기
0
288
1
Sequence vs Stream
1
251
1
코틀린 indent 코드 스타일 질문입니다.
0
263
1
non-local return 질문입니다.
1
227
1
SynchronizedLazyImpl 함수관련 질문
0
424
2
제네릭 클래스를 정의하는 경우, 반드시 변성을 고려하는 것이 바람직한가요?
4
1327
1
실무에서 lateinit 이 필요한 경우는 어떤 상황일까요?
1
455
1
4강 타입소거 관련 질문
1
331
2
추상클래스의 공변 / 반공변, 추상 제네릭 일급컬랙션 리팩토링 에 대한 질문입니다.
2
598
1
lateinit 키워드 관련해서 질문드립니다!
1
314
1

