1.8.2에 experiment로 추가되었던 enum class의 entries() method가 정식으로 추가되었다.
enum class의 상수들을 호출할 때 values()보다 entries()를 호출하는 것을 권장한다는데 무슨 차이가 있을까?
우선 values()는 상수들을 선언한 순서대로 담은 array를 리턴한다고 한다.
entries는 property로 반환되며 EnumEntries(?) 타입으로 반환되는데 공식문서를 살펴보니
상수들을 담은 list를 반환하는 interface 였다.
그럼 왜 array 대신 list를 반환하는 것이 필요할까?
enum class는 array에 상수들을 선언된 순서대로 담아두고 있다.
그리고 values()는 이 array를 반환하는 method인 것인데 array는 mutable하기 때문에 누구든지 이 배열의 순서를 바꿀 수 있다
순서가 언제든지 바뀔 수 있다면 enum class의 상수들을 관리하고 사용하는데 어려움이 생긴다.
이를 방지하기 위해서 java는 enum class의 values() method를 원본의 참조가 아닌 clone()을 반환하는 방법을 택했다.
하지만 이 방법도 결국 원본의 순서는 보장할 수 있지만 values()로 호출한 array의 순서는 따로 보장하는 수단을 갖춰야 한다.
그래서 values()로 호출한 후 list로 만들어 immutable하게 일반적인 사용법이 됐고 이를 kotlin이 더 사용하기 쉽게 entries라는 형태로 제공하게 된 것이다.
그리고 이걸 알게된 이유는 UI를 그릴때 멍청하게도 enum class의 values()를 이용해 사용했기 때문이다..
https://kotlinlang.org/api/latest/jvm/stdlib/kotlin.enums/-enum-entries.html
잘 읽었습니다. 좋은 정보 감사드립니다.