실무 프로젝트로 배우는 Kotlin & Spring/코틀린 기초

열거형

webmaster 2022. 10. 2. 17:37
728x90
enum class PaymentStatus(val label: String) : Payable { //enum 클래스 선언
    //enum 클래스도 클래스로 생성자를 만들수 있다
    UNPAID("미지급") {
        override fun isPayable(): Boolean {
            return true
        }
    },
    PAID("지급완료") {
        override fun isPayable(): Boolean = false
    },
    FAILED("지급실패") {
        override fun isPayable(): Boolean = false
    },
    REFUNDED("환불") {
        override fun isPayable(): Boolean = false
    };

    //abstract fun isPayable(): Boolean
}

interface Payable {
    fun isPayable(): Boolean
}

fun main() {
    //println(PaymentStatus.UNPAID.label)
    /*
    if (PaymentStatus.UNPAID.isPayable()) {
        println("결제 가능 상태")
    }
     */
    /*
    val paymentStatus = PaymentStatus.valueOf("PAID")
    println(paymentStatus.label)

    if (paymentStatus == PaymentStatus.PAID) {
        println("결제 완료 상태")
    }

    for (status in PaymentStatus.values()) {
        println("[$status](${status.label})")
    }
     */
    for (status in PaymentStatus.values()) {
        println("[$status](${status.label}) : ${status.ordinal}") //ordinal은 프로퍼티선언 순서
    }
}
  • 서로 연관된 상수들의 집합을 enum class를 사용해 정의할 수 있다.
  • enum 클래스도 클래스로, 생성자와 프로퍼티를 정의 할 수 있다.
    • 정의된 상수 목록 뒤에 함수를 정의할 경우 세미콜론(;)을 붙여야 한다.
    • abstract 함수를 가질 수 있고 각각의 상수는 익명 클래스 형태로 abstract 함수를 구현할 수 있다.
  • enum 클래스에서 인터페이스를 구현할 수 있다
  • valueOf를 사용해서 enum클래스를 생성할 수 있으며, 동등성 비교는 ==를 사용한다.
  • enum 클래스의 상수를 나열하기 위해서는 values를 사용하며, name, ordinal 프로퍼티를 사용해 이름을 얻거나 순서를 얻을 수 있다.
728x90

'실무 프로젝트로 배우는 Kotlin & Spring > 코틀린 기초' 카테고리의 다른 글

인터페이스  (0) 2022.10.02
상속  (0) 2022.10.02
클래스와 프로퍼티  (0) 2022.10.02
예외 처리  (0) 2022.10.01
널 안정성  (0) 2022.10.01