사내 프로젝트의 Kotlin Migration을 진행하던 도중 Java와는 달리 새롭게 알게 된 Enum 전체 요소를 가져오는 방식과 그 차이에 대하여 정리하고자 한다.
java에서 Enum의 전체 요소를 가져오는 경우 흔히 아래와 같은 식의 방법을 사용한다.
Enum.values()
하지만 이를 kotlin에서 그대로 사용하면 IDE에서 아래와 같은 경고(?)가 뜬다.
친절하게도 values() 메소드를 entries() 메소드로 대체하기를 추천해준다. 대체 두 방식의 차이가 무엇이고 어떠한 이점이 있길래 IDE에서 이렇게까지 추천해주는지 알아보자.java와 kotlin 모두 Enum.values()를 사용하게 되면 Array를 반환하게 된다. Array를 반환하는 부분에 있어서 무슨 문제가 있는지 처음에는 잘 와닿지 않았으나 정리된 글을 보니 아래와 같이 제법 심각한 문제들이 존재하였다.
위와 같은 단점들로 인하여 새롭게 등장하게 된 메소드가 바로 entries()이다.
entries() 메소드의 경우 kotlin 1.8.2에서 실험적인 모델로 추가되었으며 (1.9 이후 버전의 경우 stable) ListE를 확장한 EnumEntriesE 인터페이스를 반환해준다.
직접 차이를 비교하고 공부해보니 왜 values() 대신 entries()를 사용해야 하는지 확실하게 와닿았다. 아직 kotlin에 대한 이해도가 높지 않은 채로 코드를 작성하고 있는 단계이지만 지금처럼 하나 하나 공부하여 전반적인 kotlin의 이해도를 높여나가야겠다.
참고 포스팅
Kotlin Enums — Replace values() with entries
Kotlin 공식 문서
참고 블로그