본문 바로가기
Android/Kotlin

Kotlin - Sealed Class

by 2Plus 2020. 5. 21.

 Kotlin에는 sealed class라는 것이 있다. 이를 이용하여 콘크리트 타입으로 추상 클래스를 확장하여 쓸 수 있다. Swift에서는 enum을 좀 더 강력하게 사용할 수 있는데, 이번 글에서는 sealed class를 이용하여 Kotlin에서도 비슷한 작업을 편하게 할 수 있는 것에 대해 알아볼 것이다.

 

[Swift]

 

 

 먼저, Swift를 잠시 살펴보면 Swift에서는 이런 식으로 enum 안에 각각 다른 필요한 여러 타입들을 받아서 사용할 수 있도록 선언이 가능하다. 같은 음식 타입이지만 음식에 따라 담고 있는 정보가 다를 수 있다.

 

[Kotlin]

 

 

 Kotlin에서는  sealed class를 이용하여 위와 같이 사용할 수 있다. 이게 어떨 때 편리한지, 어떻게 사용하는지는 다음의 활용 예시를 통해 확인해 보자.

 

 

활용 예시

 

 네트워크를 이용할 때, Response를 받아서 처리할 필요가 있는 경우를 가정해 보자. request에 성공했을 때와 실패했을 때가 있는데 성공한 경우는 받아온 데이터가 필요하고, 실패한 경우는 에러 코드와 에러 메시지를 받아서 처리를 해줘야 한다. 이때 Reponse 타입에 따라 자동으로 필요한 값들도 함께 받고 싶을 때 위와 같이 선언하면 된다.

 

 

 앞서 선언한 Response를 위와 같이 사용할 수 있다. API Request의 결과에 따라 Response를 받는데, 이는 Success일 수도 있고 Failure일 수도 있다. 각 경우에 맞게 Success면 Success의 값들을 채워주고, Failure이면 Failure의 값들을 채워서 전달해준다.

 

 

 받는 곳에서는 리스폰스에 따라 맞는 처리를 해줄 수 있다. 위와 같이 when과 is 를 이용하여 어떤 타입을 받았는지 체크하고 동작을 수행할 수 있다. when과 is 를 사용한 경우에는 자동으로 타입도 바꾸어주니 그대로 사용하면 된다.

 

 

반응형

댓글