Inline 함수
함수는 호출할 때 동적으로 실행
함수 안에서 다른 함수를 호출하거나 재귀함수를 만들게 되면 동적으로 함수를 호출하게 되서 속도가 느려질 수 있습니다.
이 경우 함수의 선언문 앞에 inline을 추가하면
함수의 코드가 정적 코드로 변경되서
함수 호출 구문이 일반 실행 구문으로 변경 됩니다.
만들어진 클래스의 코드는 일반적으로 길어지게 됩니다.
inline에서 함수가 매개 변수인 경우 정적 코드로 변환 되는 것을 제외하고자 할 때는
>>> noinline 을 추가 하면 됩니다.
매개 변수로 대입 된 함수에서 return을 할 수 없도록 하고자 할 때는
>>> crossinline이라고 붙여 주면 됩니다.
특정 함수로 리턴 할 때는 return @함수이름 을 이용하면 됩니다.
Closure
함수 내의 변수의 값을 함수 외부에서 변경하기 위해서 함수를 리턴하는 형태
함수 내에서 생성한 변수를 local variable 이기 때문에 함수의 호출이 끝나면 소멸 되어야 하는데
내부 함수에서 그 데이터를 사용하게 되면 그 데이터는 소멸 되지 않고 유지가 됩니다.
fun outer() : () -> Unit{
// n은 지역변수 - 외부에서는 사용 불가
var n: Int = 1
// 람다 표현식을 리턴 - 함수를 리턴
return {
n = n + 1
println(n)
}
}
fun main(arg :Array<String>) {
// 외부 함수를 호출해서 리턴되는 함수를 변수에 저장
var inner = outer()
inner()
inner()
inner()
}
'kotlin' 카테고리의 다른 글
코틀린: 컬렉션과 람다 (0) | 2020.10.20 |
---|---|
코틀린: 컬렉션과 람다 (0) | 2020.10.20 |
코틀린 : 함수형 프로그래밍 (0) | 2020.10.20 |
코틀린 : anonymous class, Companion, Singleton (0) | 2020.10.19 |
코틀린 : inner class - Nested Class (0) | 2020.10.19 |