Hello, Android!

인라인 함수 본문

Kotlin

인라인 함수

lwndnjs93 2020. 3. 1. 18:45

인라인 함수는 인라인 함수가 호출되는 곳에 

함수의 내용을 복사하여 넣어 실행하게 된다

위와 같이 인라인 함수는 함수 선언시 inline를 붙여서 인라인 함수임을 명시한다

인라인 함수는 컴파일시 호출되는 곳에 코드가 복사되어 들어가서 내용은 짧게 작성하여야 하며

동일한 일반 함수를 두번 호출하는것 보다 인라인 함수를 두번 호출하는것이 비용이 적게 든다

 

- 인라인 함수 제한하기

인라인 함수는 컴파일 과정에서 호출되는 곳에 코드가 복사되어 들어간다

그래서 매개변수의 람다식 코드가 길거나, 인라인 함수의 내용이 너무 긴 경우 컴파일러에서 경고를 할수도 있다

만약 매개변수로 여러개의 람다식을 받을 경우 특정 매개변수는 인라인 처리하지 않게 하는것도 가능하다

인라인으로 되지않게 하고싶은 람다식 매개변수 앞에 noinline 을 붙여주면 

해당 람다식은 복하사지 않고 일반 함수를 호출하는것 처럼 별도로 호출하게 된다

 

- 비지역 반환

코틀린의 인라인 함수에서 사용하는 람다식을 종료하고 빠져나올때는 return을 사용하면 된다

위와 같이 shortFunc호출시 마지막에 return을 넣어 람다식을 종료하는것이 가능하다

하지만 이처럼 사용하게 되면 befor call lambda 가 출력되고 람다식 out이 실행되지만

람다식의 return으로 인해 shortFunc 까지 종료가 되어 after call lambda 가 출력되지 않는다

이처럼 람다식 내에서 return을 했지만 람다를 호출한 함수까지 종료되는것을 비지역 반환 이라고 한다

 

만약 람다식 내에서 잘못된 return으로 인한 비지역 반환을 대비하여,

인라인 내의 람다식에서 return을 금지하는것도 가능하다

인라인 함수의 람다식 매개변수에서 crossinline을 적어주면 람다식에서 return 사용이 금지된다

 

'Kotlin' 카테고리의 다른 글

반복 while, for  (0) 2020.03.04
중위함수  (0) 2020.03.02
익명함수  (0) 2020.03.01
고차함수를 호출하는 방법  (0) 2020.02.24
고차함수  (0) 2020.02.24