-
Kotlin SMA (single abstract method) ConversionsKotlin 2020. 7. 22. 11:37반응형
kotlin 1.4 부터 java -> kotlin 만 변환이 가능했던 SMA Conversions 이
Kotlin -> Kotlin 으로도 지원하도록 업데이트 되었습니다.
해당 기능은 Java8에도 있는 기능으로 Interfase에 있는 method가 하나일 경우
Lambda 식으로 변경해주는 기능입니다.
해당 기능을 사용 하면 코드를 간결하게 쓸수 있는 장점이 있습니다.
주로 예시로 드는것이 setOnClickListener 입니다.
아래의 코드가 setOnClickListener 를 일반적으로 작성했을때 입니다.
button.setOnClickListener(object: View.OnClickListener { override fun onClick(v: View?){ //클릭시 처리 } })
위의 코드를 SMA Conversions 하면 아래와 같이 표시가 됩니다.
메개변수인 메소드를 구분하기 위해서 ()로 밖으로 뺄수 있습니다.
button.setOnClickListener({ v: View? -> //클릭시 처리 })
매개변수가 메소드 1개이면 () 를 빼고 더 줄일수 있습니다.
button.setOnClickListener(){v:View?-> //클릭시 처리 }
추론 가능한 타입이라면 메소드의 매개변수의 타입도 생략할 수 있습니다.
button.setOnClickListener{v:View?-> //클릭시 처리 }
만약 메소드의 매개변수도 사용하지 않는다면 _ 로 표기 할수 있습니다.
button.setOnClickListener{v-> //클릭시 처리 }
메소드의 매개변수도 모두 사용 하지 않는다면 _ 도 생략 할수 있습니다.
또는 매개변수가 1 개라면 it 으로 사용 할수도 있습니다.
button.setOnClickListener{_-> //클릭시 처리 }
최종적으로 모든것을 생략하면 아래와 같이 간단한 구조로 표기가 가능합니다.
button.setOnClickListener{ //클릭시 처리 }
https://kotlinlang.org/docs/reference/java-interop.html#sam-conversions
https://thdev.tech/kotlin/androiddev/2017/10/07/Kotlin-SAM/
https://dunkey2615.tistory.com/33
https://snowdeer.github.io/android/2019/09/02/android-kotlin-single-abstract-method/
https://beomseok95.tistory.com/92
반응형'Kotlin' 카테고리의 다른 글
Kotlin Delegate Pattern (0) 2023.06.03 first-class, High-order function and inline funtion (0) 2023.05.02 kotlinOptions useIR 의 의미는? (0) 2021.12.17 Kotlin Spread Operator (코틀린 스프레드 연산자) (0) 2020.12.16 앱의 미래 : 선언적 UI 와 Kotlin MultiPlatform (Daniele Baroncelli) (0) 2020.12.15 Kotlin Cheat Sheet and Quick Reference (0) 2020.07.23 Introduction to Kotlin coroutines (0) 2019.10.10 lateinit / lazy 의 차이점 (0) 2019.10.04