더북(TheBook)

이넘은 인스턴스 개수가 미리 정해져 있고 클래스 본문 안에 이 모든 인스턴스가 나열되어 있는 특별한 종류의 클래스다. 이 점을 제외하면 enum은 일반 클래스와 똑같이 동작한다. 따라서 멤버 함수나 멤버 프로퍼티를 이넘에 정의할 수도 있다. 이러한 추가 멤버를 정의하고 싶다면, 마지막 이넘 값 다음에 세미콜론을 추가한 후 정의를 포함시켜야 한다.

Enumerations/Direction.kt

package enumerations
import atomictest.eq
import enumerations.Direction.*

enum class Direction(val notation: String) {
  North("N"), South("S"),
  East("E"), West("W"); // 세미콜론이 꼭 필요함
  val opposite: Direction
    get() = when (this) {
      North -> South
      South -> North
      West -> East
      East -> West
    }
}

fun main() {
  North.notation eq "N"
  North.opposite eq South
  West.opposite.opposite eq West
  North.opposite.notation eq "S"
}
신간 소식 구독하기
뉴스레터에 가입하시고 이메일로 신간 소식을 받아 보세요.