본문 바로가기

Kotlin

연산자 오버로딩

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