enum class
- 같은 타입의 여러 상수 정의
- comma로 구분
enum class Color{
RED,
GREEN,
BLUE
}
enum class + When expression
- else branch 없이도 모든 조건 평가
val colorCode = when(color){
Color.RED -> "#FF0000"
Color.GREEN -> "#00FF00"
Color.BLUE -> "#0000FF"
}
1. 생성자, 프로퍼티 선언 가능
enum class Color(val rgb: Int){
RED(0xFF0000),
GREEN(0x00FF00),
BLUE(0x0000FF)
}
2. 함수 선언 가능
enum class ProtocolState{
WAITING{
override fun signal() = TALKING
},
TALKING{
override fun signal() = WAITING
};
abstract fun signal(): ProtocolState
}
sealed interface / class
1. 클래스 간 계층 정의
package: data
sealed interface Error
sealed class IOError(): Error
class FileReadError(val f: File): IOError()
class DatabaseError(val source: DataSource): IOError()
object RuntimeError : Error
2. sealed class의 subclass 제약사항
- 같은 패키지 내에서만 subclass 선언
package: screen
sealed class ResponseError(): Error // Error
3. with when expression
fun log(e: Error) = when(e){
is FileReadError -> {...}
is DatabaseError -> {...}
RuntimeError -> {...}
}
728x90
'Android > Kotlin' 카테고리의 다른 글
[코틀린 인 액션] 3장 정리 (0) | 2022.11.28 |
---|---|
[코틀린 인 액션] 2장 정리 (0) | 2022.11.24 |
[Kotlin] 고차 함수, 람다, Scope functions (0) | 2022.09.18 |
[Kotiln] Nested & inner class, Extension함수, Generics (0) | 2022.09.16 |
[Kotlin] object (0) | 2022.09.16 |