제네릭 클래스를 정의하는 경우, 반드시 변성을 고려하는 것이 바람직한가요?
안녕하세요 강사님! 코루틴 강의를 너무 재밌게 들어서 고급편까지 오게 되었습니다.
지금 변성과 관련된 내용까지 수강하였고, 이 내용을 다음과 같이 이해하였습니다.
변성은 타입 인자로 전달된 클래스 간의 상속 관계를 제네릭 클래스에도 적용하기 위한 개념이다.
변성이 적용된 경우, 타입 안전성을 위해 생산자 또는 소비자 역할만을 수행할 수 있다.
그런데 저는 아직 개발 경험이 부족해서 그런지, 강의에서 보여주신 Cage<T>와 같은 상황이 발생할 수 있다는 점은 공감하지만 실제로 그런 상황을 마주한 적은 없던 것 같습니다.
아무래도 제가 작성했던 로직 상 타입 인자로 전달된 클래스의 상속 관계를 제네릭 클래스에도 적용해야 할 필요성을 느껴본 적이 없어서 그랬던 것 같은데, 이렇듯 로직 상 임의의 제네릭 클래스에 변성을 줄만한 이유가 없는 상황에서도 생산자 / 소비자의 역할을 고려하여 변성을 명시하는 것이 best practice인지 궁금합니다!
답변 1
7
안녕하세요, 잉G님!! 크으~~~ 정말 좋은 질문 감사드립니다! 😊
두 가지로 정리해주신 내용이 정확히 맞습니다! 👍
결론부터 말씀드려 보자면, "로직 상 임의의 제네릭 클래스에 변성을 줄만한 이유가 없는 상황에서" 는 굳이 변성을 주지 않으셔도 괜찮습니다! 변성이 필요한 경우에만 적절히 사용하면 충분하죠!!
저 역시 도메인 모델을 개발할 때나 애플리케이션 개발을 할 때 제네릭을 종종 사용하는 일은 있어도 제네릭에 변성을 적극적으로 활요하는 경우는 적었습니다.
다만, 개발을 하다 보면 프레임워크 혹은 라이브러리의 코드를 읽어야 하거나 특정 부분을 깊이 있게 이해해야 할 때, 변성을 접하는 일은 많았습니다. 🙂 그럴 때를 대비해 개념 정도를 알아두신다면, 정말 도움 되실거라 생각합니다.
답변이 도움이 되었으면 좋겠습니다. 감사합니다!! 🙏
질문있습니다
0
22
1
KType 관련 Kotlin 2.3 변경점
1
61
2
Kotlin 2.0(K2 컴파일러)에서 달라진 Java SAM 변환 동작
2
98
3
SuperTypeSafeCage에 대해 질문드립니다
0
61
2
좋은 코드 예시
0
94
2
val 키워드도 setValue가 있나요?
0
85
2
반공변성 질문드립니다.
1
113
3
[23강] SuperTypeToken의 equals 관련 질문
1
95
2
23강 타입 안전 이종 컨테이너 예제 관련 문의 드립니다.
0
110
2
abstract class Fish(name:String):Animal(name)
0
105
2
지식공유자님 inline에 대해서의 질문과 추가적인 질문 1가지가 있습니다!
1
117
1
안녕하세요 JMH 설정 관련 팁을 드릴까 합니다! (24년 12월 16일 기준)
0
164
2
Generic Func 질문이 있습니다
1
103
1
2강부터 영상 재생이 안되네요ㅠㅠ
0
151
2
by lazy 블럭 안에서 suspend 함수의 결과값을 받는게 가능한가요?
0
389
1
DSL 만들기
0
285
1
Sequence vs Stream
1
249
1
코틀린 indent 코드 스타일 질문입니다.
0
263
1
non-local return 질문입니다.
1
227
1
SynchronizedLazyImpl 함수관련 질문
0
423
2
실무에서 lateinit 이 필요한 경우는 어떤 상황일까요?
1
453
1
4강 타입소거 관련 질문
1
330
2
추상클래스의 공변 / 반공변, 추상 제네릭 일급컬랙션 리팩토링 에 대한 질문입니다.
2
598
1
lateinit 키워드 관련해서 질문드립니다!
1
314
1





