Android UAMP 샘플 코드를 보다가 새로운 표현을 찾았다
private val browseTree: BrowseTree by lazy {
BrowseTree(applicationContext, mediaSource)
}
val children = browseTree[parentMediaId]?.map { item -> MediaItem(item.description, item.flag)}
BrowseTree는 단순 클래스인데 어떻게 []를 사용하여 값을 가져올 수 있는 걸까?
BrowseTree 쪽으로 가보니 get을 오버 로딩하여 구현하고 있었다.
private val mediaIdToChildren = mutableMapOf<String, MutableList<MediaMetadataCompat>>()
operator fun get(mediaId: String) = mediaIdToChildren[mediaId]
get을 오버로딩하여 browseTree는 mediaIdToChildren이라는 map 객체에 접근할 수 있게 된 것이다.
찾아보니 kotlin은 연산자, get / set 등을 operator 키워드를 통해 오버로딩할 수 있다고 한다
overloading
재사용성을 위해 같은 이름의 메서드를 매개변수 값만 다르게 하여 사용하는 것
참고 글
https://0391kjy.tistory.com/59
코틀린(Kotlin) - 산술 연산자 오버로딩
코틀린에서는 특정 연산자의 역할을 함수로 정의할 수 있습니다. 이를 Convention(관례)이라고 합니다. 가장 기본적인 예로는 산술 연산자가 있습니다. 자바에서는 원시 타입(primitive)에 대해서만
0391kjy.tistory.com
https://sabarada.tistory.com/174
[kotlin] 코틀린 차곡차곡 - 9. 연산자 오버로딩 (Operator Overloading)
안녕하세요. 오늘은 코틀린의 연산자 오버로딩에 대해서 알아보도록 하겠습니다. 연산자 오버로딩 Java, javascript 만 사용하여 코딩을 하셨던 분들은 연산자 오버로딩이라는 개념이 생소하실 수
sabarada.tistory.com
'Kotlin' 카테고리의 다른 글
Flow 결합 연산자 : zip, combine (0) | 2023.04.11 |
---|---|
operator fun invoke (0) | 2023.04.10 |
정렬 (0) | 2023.01.09 |
코루틴 1 (0) | 2022.05.12 |
[Kotlin In Action] 위임 (0) | 2022.03.30 |