Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | ||||||
2 | 3 | 4 | 5 | 6 | 7 | 8 |
9 | 10 | 11 | 12 | 13 | 14 | 15 |
16 | 17 | 18 | 19 | 20 | 21 | 22 |
23 | 24 | 25 | 26 | 27 | 28 |
Tags
- Algorithm
- sqlite
- Behavior
- recyclerview
- Android
- View
- CoordinatorLayout
- kotlin
- Coroutine
- notification
- activity
- 안드로이드
- Navigation
- DataBinding
- hilt
- lifecycle
- onMeasure
- 알림
- BOJ
- CollapsingToolbarLayout
- 백준
- ViewModel
- AppBarLayout
- 코틀린
- onLayout
- HTTP
- room
- LiveData
- CustomView
- 알고리즘
Archives
- Today
- Total
개발일지
Kotlin in A..Z (23) - 열거형 클래스, 실드 클래스 본문
- 열거형 클래스 (Enum Class)
Java의 Enum Class와 매우 유사하다
코드
enum class Direction {
NORTH, SOUTH, WEST, EAST
}
- 멤버를 가지는 열거형 클래스
프로퍼티와 메서드를 가질 수 있다.
코드
enum class Direction(private val value: Int = 0) {
NONE {
val str: String = "None"
}, NORTH(1), SOUTH(2), WEST(3), EAST(4);
fun getValue() {
println(value)
}
}
- 인터세이스를 상속받는 열거형 클래스
인터페이스를 상속받고 개별적, 통합적으로 재정의할 수 있다.
코드
enum class Direction(private val value: Int = 0) : Action {
NONE {
// 개인적인 오버라이딩
override fun action() {
println("NONE")
}
},
NORTH(1) {
// 개인적인 오버라이딩
override fun action() {
println("Go North")
}
},
SOUTH(2) {
// 개인적인 오버라이딩
override fun action() {
println("Go South")
}
},
WEST(3) {
// 개인적인 오버라이딩
override fun action() {
println("Go West")
}
}, EAST(4);
fun getValue() {
println(value)
}
// 통합적인 오버라이딩
override fun action() {
println("Go $value")
}
}
- when문을 이용한 케이스 처리
when은 기본적으로 else가 필수이지만, 모든 경우를 brach할 경우 else를 생략할 수 있다.
코드
enum class Direction {
NONE, NORTH, SOUTH, WEST, EAST
}
fun action(direction: Direction) = when(direction) {
Direction.NONE -> {
}
Direction.NORTH -> {
}
Direction.SOUTH -> {
}
Direction.EAST -> {
}
Direction.WEST -> {
}
}
- 실드 클래스 (Sealed Class)
Enum 클래스의 확장형이다.
기본이 abstract 클래스이고 생성자는 private이기 때문에 인스턴스를 만들 수 없다.
같은 파일 안에서만 상속이 가능하다. (다른 파일에선 상속이 불가)
Enum과 달리 서로 다른 생성자를 가진 class를 만들 수 있다.
코드
sealed class State {
abstract fun action()
}
class Slow(val time: Int, val speed: Int) : State() {
override fun action() {
println("SLOW")
}
}
class Air(val time: Int) : State() {
override fun action() {
println("Air")
}
}
'Kotlin (코틀린)' 카테고리의 다른 글
Kotlin in A..Z (25) - 제네릭 (0) | 2020.07.19 |
---|---|
Kotlin in A..Z (24) - 연산자 오버라이딩 (0) | 2020.07.18 |
Kotlin in A..Z (22) - 내부 클래스 (0) | 2020.07.17 |
Kotlin in A..Z (21) - 데이터 클래스 (0) | 2020.07.17 |
Kotlin in A..Z (20) - 추상 클래스 (0) | 2020.07.17 |
Comments