App노자
[Kotlin] 열거형 클래스와 기타 클래스 본문
1. 열거형 클래스
enum class Day(var num: Int) {
Monday(1), Tuesday(2), Wednesday(3), Thursday(4),
Friday(5), Saturday(6), Sunday(7)
}
fun main() {
val day = Day.Monday
when(day.num) {
1,2,3,4,5, -> println("weekDay")
6,7 -> println("weekend")
}
}
열거형 클래스란 여러 개의 상수를 선언하고 열거된 값을 조건에 따라 선택할 수 있는 클래스이다
열거형 클래스는 enum키워드와 함께 선언할수 있고 자료형이 동일한 상수를 나열할 수 있다
각 상수는 enum 클래스의 객체로 취급되고 값은 매개변수를 통해 초기화될 수 있다
https://kotlinlang.org/docs/enum-classes.html
Enum classes | Kotlin
kotlinlang.org
interface Score {
fun getScore(): Int
}
enum class MemberType(var prio: String) : Score {
NORMAL("Thrid") {
override fun getScore(): Int = 100
},
SILVER("Second") {
override fun getScore(): Int = 500
},
GOLD("First") {
override fun getScore(): Int = 1500
}
}
fun main() {
println(MemberType.NORMAL.getScore())
println(MemberType.GOLD)
println(MemberType.valueOf("SILVER"))
println(MemberType.SILVER.prio)
for (grade in MemberType.values()) {
println("grade.name = ${grade.name}, prio = ${grade.prio}")
}
}
열거형 클래스에서 인터페이스의 메서드도 구현이 가능하다
인터페이스를 상속하고 객체들이 등급별 점수를 반환하도록 메서드를 구현등의 방식으로 활용이 가능하다
2. 실드 클래스
// 1. 실드 클래스 선언 방법 첫번째 스타일
sealed class Result {
open class Success(val message: String): Result()
class Error(val code: Int, val message: String): Result()
}
class Status: Result() // 실드 클래스 상속은 같은 파일에서만
class Inside: Result.Success("Status") // 내부 클래스 상속
// 2. 실드 클래스 선언 방법 두번째 스타일
/*
sealed class Result
open class Success(val message: String): Result()
class Error(val code: Int, message: String): Result()
class Status: Result()
class Inside: Success("Status")
*/
fun main() {
// Success에 대한 객체 생성
val result = Result.Success("Good!")
val msg = eval(result)
println(msg)
}
// 상태를 검사하기 위한 함수
fun eval(result: Result): String = when(result) {
is Status -> "in progress"
is Result.Success -> result.message
is Result.Error -> result.message
// 모든 조건을 가지므로 else 가 필요 없다
}
실드 클래스는 미리 만들어 놓은 자료형들을 묶어서 제공한다
실드 클래스를 선언하려면 sealed키워드를 class와 함께 사용하며 따로 객체를 만들 수는 없다
기본적으로 private이며 다른 접근 제한자는 허용되지 않기에 같은 파일 안에서는 상속이 가능하지만 다른 파일에서는 상속이 불가능하게 제한 된다
블록 안에서 선언되는 클래스는 상속이 필요한 경우 open키워드로 선언될 수 있다
3. 애노테이션 클래스
애노테이션은 코드에 부가 정보를 추가하는 역할을 한다
@ 기호와 함께 표기하며 주로 컴파일러나 프로그램 실행 시간에서 사전 처리를 위해 사용한다
직접 작성하기 보다는 주로 프레임워크에서 제공하는 에노테이션을 사용한다
'Android > Kotlin' 카테고리의 다른 글
[Kotlin] 클래스와 클래스의 관계 (0) | 2023.05.29 |
---|---|
[Kotlin] 연산자 오버로딩 (0) | 2023.05.28 |
[Kotlin] 데이터 클래스와 이너 클래스 (0) | 2023.05.16 |
[Kotlin] 추상 클래스와 인터페이스 (0) | 2023.05.03 |
[Kotlin] 프로퍼티 (0) | 2023.04.27 |