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> ? 제네릭스는 클래스나 함수를 정의할 때 타입을 확실히 정하지 않는 것을 말한다.
다양한 타입으로 클래스를 여러개 정의하지 않아도 된다.
'안드로이드' 카테고리의 다른 글
[안드로이드] Kotlin 고차함수& Lambda (0) | 2022.03.28 |
---|---|
[안드로이드] Kotlin 범위 지정 함수(let, with, run, apply, also) (0) | 2022.03.27 |
[Android] Kotlin 코루틴 사용 (0) | 2021.10.07 |
[안드로이드] 안드로이드 coroutine 살펴보기 (0) | 2021.07.19 |
[안드로이드] 안드로이드 프로젝트 구조/ 초기 패키지 구조 설정하기 (0) | 2021.06.28 |