인프런 커뮤니티 질문&답변

잉G님의 프로필 이미지
잉G

작성한 질문수

코틀린 고급편

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

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

해결된 질문

작성

·

1.2K

3

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

 

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

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

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

 

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

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

 

 

답변 1

6

최태현님의 프로필 이미지
최태현
지식공유자

안녕하세요, 잉G님!! 크으~~~ 정말 좋은 질문 감사드립니다! 😊

두 가지로 정리해주신 내용이 정확히 맞습니다! 👍

 

결론부터 말씀드려 보자면, "로직 상 임의의 제네릭 클래스에 변성을 줄만한 이유가 없는 상황에서" 는 굳이 변성을 주지 않으셔도 괜찮습니다! 변성이 필요한 경우에만 적절히 사용하면 충분하죠!!

저 역시 도메인 모델을 개발할 때나 애플리케이션 개발을 할 때 제네릭을 종종 사용하는 일은 있어도 제네릭에 변성을 적극적으로 활요하는 경우는 적었습니다.

다만, 개발을 하다 보면 프레임워크 혹은 라이브러리의 코드를 읽어야 하거나 특정 부분을 깊이 있게 이해해야 할 때, 변성을 접하는 일은 많았습니다. 🙂 그럴 때를 대비해 개념 정도를 알아두신다면, 정말 도움 되실거라 생각합니다.

 

답변이 도움이 되었으면 좋겠습니다. 감사합니다!! 🙏

잉G님의 프로필 이미지
잉G

작성한 질문수

질문하기