inflearn logo
강의

강의

N
챌린지

챌린지

멘토링

멘토링

N
클립

클립

로드맵

로드맵

지식공유

코틀린 고급편

4강. 선언 지점 변성 / 사용 지점 변성

제네릭 클래스를 정의하는 경우, 반드시 변성을 고려하는 것이 바람직한가요?

해결된 질문

1325

잉G

작성한 질문수 3

4

안녕하세요 강사님! 코루틴 강의를 너무 재밌게 들어서 고급편까지 오게 되었습니다.

 

지금 변성과 관련된 내용까지 수강하였고, 이 내용을 다음과 같이 이해하였습니다.

  1. 변성은 타입 인자로 전달된 클래스 간의 상속 관계를 제네릭 클래스에도 적용하기 위한 개념이다.

  2. 변성이 적용된 경우, 타입 안전성을 위해 생산자 또는 소비자 역할만을 수행할 수 있다.

 

그런데 저는 아직 개발 경험이 부족해서 그런지, 강의에서 보여주신 Cage<T>와 같은 상황이 발생할 수 있다는 점은 공감하지만 실제로 그런 상황을 마주한 적은 없던 것 같습니다.

아무래도 제가 작성했던 로직 상 타입 인자로 전달된 클래스의 상속 관계를 제네릭 클래스에도 적용해야 할 필요성을 느껴본 적이 없어서 그랬던 것 같은데, 이렇듯 로직 상 임의의 제네릭 클래스에 변성을 줄만한 이유가 없는 상황에서도 생산자 / 소비자의 역할을 고려하여 변성을 명시하는 것이 best practice인지 궁금합니다!

 

 

kotlin 함수형-프로그래밍 객체지향

답변 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