본문 바로가기
Kotlin

[Kotlin] enum값을 순차적으로 이동(앞,뒤)하여 가져올 수 있는 코드

by 루에 2021. 4. 19.
반응형

enum값을 메뉴의 flow에 따라 배치하거나 enum에 parameter를 주고 다른 용도로 활용할 경우 다음 값, 이전 값을 가져올 필요가 있을 때가 발생한다. 그 경우 활용할 수 있는 코드를 공개한다. 확장함수로 Enum.함수명 으로 사용하면 된다. 현재 값이 enum의 마지막인데 next()를 콜 할경우 첫번째 값으로 순회하여 리턴한다. 마찬가지로 첫번째 값인데 previous()를 호출할 경우 마지막 값으로 순회하여 리턴한다.

 

inline fun <reified T: Enum<T>> T.next(): T {
    val values = enumValues<T>()
    val nextOrdinal = (ordinal + 1) % values.size
    return values[nextOrdinal]
}

inline fun <reified T: Enum<T>> T.previous(): T {
    val values = enumValues<T>()
    var nextOrdinal = (ordinal - 1) % values.size
    if(nextOrdinal < 0) {
        nextOrdinal = values.size - 1
    }
    return values[nextOrdinal]
}

// example
enum AL {
	A, B, C
}

fun test() {
	val a = AL.A
	println(a)
    println(a.next())
    println(a.previous())
}

/*
결과
A
B
C
*/

 

반응형

댓글