안드로이드

[Android] 코틀린의 enum class & Sealed class

이손안나 2021. 10. 7. 17:09

enum class :  상수를 열거하기 위해서 쓰이며 상수를 집합으로 관리할 수 있어 코드의 가독성 높아짐.

enum class State {
	IDLE, RUNNING, FINISHED
}

fun main() {
	val state = State.RUNNING
    val message =when (State) {
    	State.IDLE -> " idle"
        State.RUNNING -> "running"
        State.FINISHED -> "finished"
    }
    println(message)
}

sealed class : super class를 상속받는 child클래스의 종류 제한하는 특성을 가지고 있는 클래스 

- 다음과 같이 중첩 클래스로 정의할 수도 있음. 상위 클래스 아래에 하위 클래스들이 위치하도록 선언.

- sealed class 는 abstract 클래스로, 객체로 생성할 수 없음.

- 하위 클래스는 class, data class, object class 으로 정의할 수 있음.

 

✨ when 은 else 구문이 꼭 들어가야 하지만 sealed class를 사용하면 모든 하위 클래스에 대한 케이스를 구현하면 else 구문을 추가하지 않을 수 있음.

sealed class DataResult<out T> {
    data class Success<out T>(val data: T) : DataResult<T>()
    data class Error(val exception: Exception) : DataResult<Nothing>()
    object Loading : DataResult<Nothing>()

    override fun toString(): String {
        return when (this) {
            is Success<*> -> "Success[data=$data]"
            is Error -> "Error[exception=$exception]"
            Loading -> "Loading"
        }
    }
}

➡️ app 이 서버에 어떤 데이터에 대한 요청 하고 성공하면 success, 실패하면 error , 처리중이면 loading 을 리턴함.

 

Generic type: <out T:Any> ? 제네릭스는 클래스나 함수를 정의할 때 타입을 확실히 정하지 않는 것을 말한다.

다양한 타입으로 클래스를 여러개 정의하지 않아도 된다.