invoke 함수에 대해

최희창·2022년 6월 26일
0

Kotlin

목록 보기
7/13

invoke란?

  • 이름 없이 간편하게 호출될 수 있는 함수
class Test{
    operator fun invoke(str: String){
        print(str)
    }
}

fun main(){
    val test = Test()
    test("wow")
}

operator 키워드

  • 코틀린은 이름을 부여한 함수임에도 불구하고 실행을 간편하게 할 수 있는 연산자라는 것을 제공한다. 이러한 예시로는 +, -부터 invoke까지 있는데, 이러한 연산자를 overloading할 수 있도록 키워드가 바로 operator입니다.

람다와 invoke의 관계

  • 람다는 커파일되면서 코틀린에 정의된 FunctionN()형태로 변환된다. 이 Function 인터페이스에는 invoke만이 정의되어 있다.
// lambda
val convert = { x: Int -> x.toString() }

// compiled
val convert = object : Function1<Int, String> {
        override fun invoke(p1: Int): String {
            return p1.toString()
        }
}
  • 코드를 보면 Function1<Int, String> 형태로 변환되고, 구현 내용이 override된 invoke 함수로 들어가는 것을 확인할 수 있다.
  • 그래서 convert.invoke(2)와 같이 호출하지 않고 convert(2)와 같이 간편한 형태로 호출할 수 있다.
profile
heec.choi

0개의 댓글