이름을 모아두는 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, 그리고 멤버 함수나 프로버티 정의 시 세미콜론을 붙여야 한다는 부분은 꼭 기억하고 있어야 할 것 같다.
'공부 자료 > 코틀린[Kotlin]' 카테고리의 다른 글
[Atomic 36] 구조 분해 선언 (1) | 2024.02.08 |
---|---|
[Atomic 35 ] 데이터 클래스 (feat. data class 클래스명) (0) | 2024.02.07 |
[Atomic 33] When 식 (1) | 2024.02.06 |
[Atomic 32] 오버로딩 (feat. overloading) (1) | 2024.02.05 |
[Atomic 31] 이름 붙은 인자와 디폴트 인자 (0) | 2024.02.05 |