Notice
Recent Posts
Recent Comments
Link
| 일 | 월 | 화 | 수 | 목 | 금 | 토 |
|---|---|---|---|---|---|---|
| 1 | 2 | 3 | 4 | 5 | 6 | |
| 7 | 8 | 9 | 10 | 11 | 12 | 13 |
| 14 | 15 | 16 | 17 | 18 | 19 | 20 |
| 21 | 22 | 23 | 24 | 25 | 26 | 27 |
| 28 | 29 | 30 | 31 |
Tags
- 마크다운
- OS
- github
- test
- JetPack
- coroutine flow
- Di
- kotlin
- LiveData
- android study jam
- Android
- 다단계 큐
- design pattern
- markdown
- 깃허브
- 리드미
- SOLID
- 운영체제
- Spring Boot
- Compose
- git
- 더티비트
- O.S
- readme
- JUnit
- spring
- Class.class
- Constraint Layout
- 데드락
- Data Binding
Archives
- Today
- Total
차지
[Kotlin] inline function 본문
inline
- inline 키워드는 함수 선언 키워드인 fun 앞에 붙습니다.
- inline 키워드는 함수 구현 자체를 코드에 넣어 오버헤드를 줄이는 키워드입니다.
코드 예시
고차함수
fun setOnClickListener(onClick: () -> Unit) {
onClick()
}
fun main() {
setOnClickListener(print("clicked"))
}
해당 코드를 자바코드로 디컴파일하면 아래처럼 동작합니다.
(가독성을 위해 코틀린 코드로 동작원리만 비슷하게 작성했습니다.)
fun main() {
setOnclickListner(
fun invoke() {
print("clicked")
}
)
}
inline 키워드 사용
같은 코드를 inline으로 작성하면 아래와 같습니다.
inline fun setOnClickListner(onClick: () -> Unit) {
onClick()
}
fun main() {
setOnclickListner { print("clicked") }
}
해당 코드는 아래처럼 동작합니다.
fun main() {
print("clicked")
}
- 힙에 저장된 함수를 호출하는 것이 아닌, 함수에 있는 코드를 그대로 가져오는 것을 inline 키워드가 맡습니다.
- 불필요한 과정을 생략하게 되므로 성능의 이점을 가져올 수 있습니다.
inline은 만능?
단지 키워드를 붙이는 것만으로 성능의 이점을 가져온다면, 모든 함수는 inline이 붙어야 합니다.
inline 키워드는 코드를 그대로 붙여넣는 키워드이기 때문에 바이트코드가 늘어난다는 단점이 있습니다.
추가 키워드
noinline
앞서 언급했듯이 inline에게도 단점이 있습니다.
noinline 키워드를 매개변수에 붙여 선택적으로 inline 키워드를 활용할 수도 있습니다.
inline fun setOnClickListner(onClick: () -> Unit, noinline onDoubleClick: () -> Unit) {
}
처럼 사용한다면 noinline 키워드가 붙은 매개변수는 일반 매개변수처럼 동작합니다.
crossline
inline 키워드가 속한 함수가 아닌 다른 곳에서 매개변수를 소비하고 싶을 때 사용한다.
전달받은 매개변수를 다른 dispatcher에서 사용하고자 할 때를 예로 들 수 있다.
inline fun setOnClickListener(crossline onClick: () -> Unit) {
coroutineScope.launch {
onClick()
}
}'Android > Android' 카테고리의 다른 글
| [Java] Reflection (0) | 2022.06.03 |
|---|---|
| [Android] LiveData -> Coroutine Flow (0) | 2022.05.24 |
| [Android] Single Live Event & Event wrapper (0) | 2022.01.25 |
| [Android] Two - way Data Binding (0) | 2022.01.19 |
| [DI] Android에서의 DI 첫걸음 (0) | 2022.01.07 |