본문 바로가기

공부 자료/코틀린[Kotlin]

[Atomic 34] 이넘(feat. Enum)

이름을 모아두는 Enum

 

 

코틀린에서도 Enum이 존재하는데, 어떻게 사용되고 어떤 편리한 점이 있는지 알아보자.

 


 

[ Enum ]

Enum

: enum class로 이름을 관리하는 편리한 방법

: enum 생성 시 이름에 해당하는 문자열을 돌려주는 toString() 생성

: 이넘 이름 사용 시 이름을 한정시켜야 함

: import를 사용해 이넘에 정의된 모든 이름을 현재의 이름 공간으로 불러오면 이넘 이름을 한정 시키지 않아도 됨

: import시 Enum.*은 이넘에 있는 모든 이름을 임폴트 하지만 Enum 자체의 이름을 임폴트하지 않음

: Enum.values()를 사용해 이넘 값 이터레이션 가능

: Enum내이름.ordinal은 Enum 내 이름 순서를 의미하며, 0부터 시작함

 

 

[ 기본 Enum ]

import atomictest.eq
import enumerations. Size.*
import enumerations.Size // Size라는 이름 자체도 사용 가능

enum class Size {
	Tinyz Small, Medium, Large, Huge, Gigantic
}

fun main() {
	Gigantic eq "Gigantic" Size.values().toList() eq
		listOf(Tiny, Small, Medium, Large, Huge, Gigantic)
	Tiny.ordinal eq 0
	Huge.ordinal eq 4
}

 

: import 했기 때문에 Size.Gigantic이 아닌 Gigantic으로 작성 가능

: Tiny / Huge는 각각 첫번째, 다섯번째 이름이기 때문에 ordinal이 각각 0 / 4를 의미

 

 

[ 추가 멤버 정의를 위한 세미콜론 ]

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
     }
}

 

: 멤버 함수나 멤버 프로퍼티를 이넘에 정의 가능

: 이넘에 정의 시 세미콜론을 추가한 후 정의가 가능함

: 위의 경우 가능한 모든 enum값을 처리하고 있기 때문에 else를 작성하지 않아도 됨

 


 

[ 오늘의 학습 소감 ]

 

오늘 학습한 이넘은 자바에서도 로그인 시 해당 로그인 사용자를 구별할 때 혹은 어떤 소셜 로그인 사용자인지 표시할 때만 사용해 본 것인데, 코틀린에서도 이넘을 사용하며 코드의 가독성을 높여주기에 항상 사용하는 것을 권장하고 있었다. 자바에서는 이넘을 관리하기 위한 다양한 방법들이 존재했는데 코틀린에서는 이를 어디까지 활용할 수 있을지 궁금해지며, 오늘 학습 중에서는 ordianl과 values, 그리고 멤버 함수나 프로버티 정의 시 세미콜론을 붙여야 한다는 부분은 꼭 기억하고 있어야 할 것 같다.