Replies: 3 comments
-
inline 메서드는 인자로 받은 함수를 다른 실행 context를 통해 호출할 때는, 함수 안에서 비-로컬 흐름을 제어할 수 없습니다. 즉, 접근할 수 있는 영역을 벗어나기 때문에 crossinline 키워드를 이용해 비-로컬 흐름에 접근할 수 있도록 도와줍니다. 이를 디컴파일하면, inline 키워드와 같이 메서드 실행 흐름에 따라 람다 실행 부분에 바이트 코드가 삽입된 것을 확인할 수 있습니다. |
Beta Was this translation helpful? Give feedback.
-
crossinline 키워드는 inline 함수의 람다를 다른 컨텍스트의 람다 블록에서 사용하고 싶을 때 사용하며, inline 함수의 람다를 다른 람다 블록에서 사용하면서 비지역 반환이 일어날 경우, 문제가 발생할 수 있습니다. 따라서, inline 함수 내 람다를 다른 람다 블록 내부에 사용하고 싶다면 crossinline 키워드를 사용해 비지역 반환을 방지해야합니다. |
Beta Was this translation helpful? Give feedback.
-
crossinline람다에서 람다 내부에 return을 사용할 수 없도록 컴파일 오류를 만듦 crossinline 사용 시
비지역 반환 (non-local return)
|
Beta Was this translation helpful? Give feedback.
-
crossinline 키워드는 Kotlin에서 inline 함수의 람다 파라미터에서 비지역 반환을 금지할 때 사용됩니다. 여기서 비지역 반환이란 해당 스코프를 벗어나는 반환을 의미합니다.
일반적으로 inline 함수 내의 람다에서는 함수 실행을 중단하고 함수의 바깥으로 바로 반환할 수 있지만, crossinline을 사용하면 람다 내에서 비지역 반환을 할 수 없도록 제한합니다. 이는 주로 특정 코드 흐름을 유지하거나, 람다가 특정 위치에서만 실행되어야 할 때 안정성을 보장하기 위해 사용됩니다.
Beta Was this translation helpful? Give feedback.
All reactions