인프런 영문 브랜드 로고
인프런 영문 브랜드 로고

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

듀크님의 프로필 이미지
듀크

작성한 질문수

자바 개발자를 위한 코틀린 입문(Java to Kotlin Starter Guide)

14강. 코틀린에서 다양한 클래스를 다루는 방법

abstract class와 sealed class는 어느경우에 나눠 사용하나요?

해결된 질문

작성

·

1.8K

4

좋은 강의 감사드립니다. 🙇‍♂️

한 가지 의문이 있습니다.

sealed class를 사용하는 목적이 계층 구조를 안전하게 만들고 싶다로 이해됩니다.

또한, 문서를 보아하니 sealed class자체가 abstract class인것 같은데,  기존의 abstract class를 사용하는 경우도 대부분 주로 계층화에 많이 사용되지 않았습니까? 예를 들자면 interface -> abstract class -> class 순으로 점차 구체화 해나가는 식으로요.

그럼 그냥 abstract class를 사용해야 할 필요를 느낄 경우에 항상 sealed class를 사용해버리면 when을 쓸 때 안정성만 더 증가하는 것 같은데, 코틀린에서 abstract class는 언제 사용하나요?

 

정리하자면, abstract class를 사용하면 아무나 이를 서브클래싱 하여 확장할 수 있으나, 실제 자바의 코드들은 이러한 용도로 사용되고있진 않습니다. (이러한 상황 자체가 sealed class의 탄생 배경으로 이해 됩니다).

 

따라서 sealed class자체가 abstract class의 super set인 것 같은데, 이렇게 되면 abstract class를 사용했을 때의 베네핏이 있나요? 실제 코틀린으로 업무를 보시면서 abstract class를 사용하시는 경우가 있는지 궁금합니다.

 

당장 드는 생각은 대부분의 경우를 abstract class가 아닌 sealed class로 퉁쳐도 될 것 같다고 생각되어서요.... 🤔

답변 2

1

듀크님의 프로필 이미지
듀크
질문자

질문이 잘 전달되어서 다행이네요 !

고민하고 있던 내용이었는데, 실무에서 코틀린이 어떻게 사용되고 있는지 잘 몰라 확신이 없었습니다 ㅎㅎㅎ...

명확한 답변 감사드립니다 !

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

도움이 되었다니 다행입니다!!!

감사합니다~!!! 😊

1

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

안녕하세요, 창훈님! 정말 좋은 질문 감사합니다 :)

저 역시 많이 고민했던 부분이라, 제가 알고 있는 내용을 말씀드려볼게요!!

 

우선 내용이 조금 길어질 수 있어서 영상으로도 준비를 했고요!!

 

글로도 간단 요약을 드려보자면,

sealed class와 abstract class의 가장 큰 차이는 구현체가 동일 패키지'안'에만 있어야 하는지 여부이고

그 차이로 인해

- 라이브러리 or 프레임워크를 개발할 때는 abstract class를 활용하는 경우가 많으며

- 실무에서도 multi-module project인 경우에 한 모듈에 abstract class를 넣고 다른 모듈에서 구현체를 만드는 경우는 정말 간혹 쓰는 경우가 있습니다.

 

감사합니다!! 혹시라도 더 궁금하신 점이 있으시면 편하게 말씀해주세요!! ^^

듀크님의 프로필 이미지
듀크

작성한 질문수

질문하기