[kotlin] kotlin 1.9.0의 enum class의 entries()

할렐루카·2023년 7월 26일
2

kotlin진심펀치

목록 보기
2/6

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()를 이용해 사용했기 때문이다..

출처:
코틀린 1.9.0 release

https://kotlinlang.org/api/latest/jvm/stdlib/kotlin.enums/-enum-entries.html

2개의 댓글

comment-user-thumbnail
2023년 7월 26일

잘 읽었습니다. 좋은 정보 감사드립니다.

답글 달기
comment-user-thumbnail
2023년 7월 27일

좋은 정보 감사합니다!!!!!! 🤓🙏

답글 달기