반응형

이 게시물은 다음 링크를 참조하여 학습했습니다

 

Kotlin - inline functions 이해하기

inline functions는 함수 내용을 호출하는 부분에 복사하여 추가적인 메모리 할당이나 함수 호출로 발생하는 Runtime overhead를 줄여줍니다. noinline 키워드는 특정 인자만 제외하고 나머지만 inlnie으로

codechacha.com

 

Kotlin - 고차 함수(High-order function), 함수 타입(function type), 람다(lambda), 익명함수(anonymous function)

코틀린 함수는 일급(first-class) 함수 입니다. 이것이 의미하는 것은 코틀린에서 함수가 변수와 자료구조에 저장될 수 있고, 함수의 매개변수로 보내질 수 있고, 다른 고차 함수로부터 반환되어질

offbyone.tistory.com

 

Inline functions | Kotlin

 

kotlinlang.org

 

1. 고차 함수(Higher order functions)

고차함수는 인자가 함수이거나 함수를 리턴하는 함수이다.

람다식을 활용해서 함수형 프로그래밍 방식으로 코드를 짤때 자주 등장하는 그녀석들이다.

고차함수를 활용하면 간결한 코드를 짤 수 있는 이점이 있지만, 내부적으로 객체를 하나 더 생성하는 구조이기 때문에 성능을 저하시킬 수 있다.

 

2. 인라인 함수(inline functions)

아래처럼 함수 앞에 inline 키워드를 붙이면 inline funtion으로 사용할 수 있다.

inline fun someMethod(a: Int, func: () -> Unit):Int {
    func()
    return 2*a
}

 

인라인 함수를 쓰게 되면 컴파일 할 때 함수 내부의 코드를 호출하는 위치에 복사하게 된다.

컴파일되는 바이트코드의 양은 많아지지만, 추가적인 객체를 생성하는 과정을 없애면서 메모리상으로 이점이 있다.

단, 인라인 함수는 내부적으로 코드를 복사 붙혀넣기 하기 때문에 인자로 전달받은 함수는 다른 함수로 전달되거나 참조될 수 없다.

 

3. 노-인라인 (noinline)

모든 인자를 inline으로 처리하고 싶지 않을 때 noinline 키워드를 사용한다.

inline 함수 내에서 noinline키워드를 사용하면 해당 키워드가 붙은 키워드만 inline에서 제외된다.

즉, 다른 함수의 인자로 전달이 가능해진다.

 

* inline키워드를 이용하면 런타임 오버헤드를 줄일 수 있지만, 바이트코드의 양이 많아질 수 있기때문에 일반적으로는 1~3줄 정도 길이의 함수에 사용하는 것이 효과적이라고 한다.

반응형

'Legacy' 카테고리의 다른 글

[Kotlin #7] Sequences  (0) 2022.05.23
[Kotlin #6] 확장 함수(Extension Functions)  (0) 2022.05.23
[Kotlin #4] Scope Functions  (0) 2022.05.16
[Kotlin #3] Collections  (0) 2022.05.16
[Kotlin #2] 고급문법  (0) 2022.05.11

+ Recent posts