본문 바로가기
Android 개발/Kotlin

Sealed Class에 대해서 알아보자

by Developer88 2020. 1. 21.
반응형

오늘은 Kotlin의 Sealed Class에 대해서 알아보도록 하겠습니다.

Sealed Class는 진화된 Enum클래스라고 하시는 분도 있는데요.

공식문서에도 어떤 면에서는 Enum 클래스의 확장이라고도 설명하고 있습니다.

 

1. Enum vs Sealed Class

Sealed Class에 대해서 잘 이해하기 위해서,

Enum클래스와 비교를 해 보면 시작하겠습니다.

둘다 타입을 제한적으로 사용하고자 할때 많이 사용하게 되는데요.

 

Enum에서는 특정 값을  single instance로서 하나의 객체만 제한적으로 사용할 수 있으며,

생성자의 형태도 동일해야만 합니다.

 

 

이에 반해, Sealed Class에서는 state(상태 값)을 포함하고 있는 여러개의 instance를 가질 수 있구요.

생성자도 각각의 특징에 따라서 다르게 가져갈 수 있습니다.

정적인 상태의 single instance가 아닌, 다양한 state를 사용할 있다는 것 이지요.

 

2. Sealed Class

SealedClass는 자신은 abstract클래스이고,

자신을 상속받는 서브클래스들을 가질 수 있습니다.

이 서브클래스들은 위에서 언급한 대로, 각자 개성에 맞게 생성자를 가질 수 있는데요.

data클래스도 상속이 가능하므로 사용이 가능합니다.

대신 특별히 생성자로 인자를 받아서 상태값이 변하지 않는 경우는,

object키워드를 붙여서 사용하라고 권하고 있습니다.

 

아래와 같이 서브클래스들을 만들어서 사용할 수 있습니다.

 

 

 

3. Sealed 와 When

공식문서에도 언급되어 있지만,

Sealed Class는 When과 함께 사용되어질 때 강력해 집니다.

 

ViewModel에서 위의 SealedClass를 get과 set을 해 주었다고 가정해 보겠습니다.

(ViewModel에 관한 글은 아래글을 참조해주세요.)

그럼 아래와 같이 observe가 가능해 집니다.

 

네트워크가 refresh되면 loading되는 UI이 나오도록 코딩하기 위해서 여기저기 코드가 흩어지는 것이 아니라,

ViewModel에서 set해주는 상태에 따라서,

상황에 맞게 반응해 주면 되는 것 이지요.

 

4. 정리

이상으로 Enum Class의 확장판 격인 Sealed클래스에 대해서 정리해 보았습니다.

생성자를 다르게 쓸 수 있는 점등 좋은 점이 많네요.

Sealed Class에 관해 더 좋은 방법이 있다면 이 글을 통해서 업데이트 하도록 하겠습니다.

 

728x90

댓글0