여기서 multiplyBy2 함수가 들어 있는 객체나 클래스, 패키지에 들어 있는 double 함수가 호출된다. 만약 double이 다른 클래스에 정의된 인스턴스 함수고 해당 클래스의 인스턴스에 대한 참조를 가지고 있다면 다음 구문을 사용해 이를 호출할 수 있다.

    class MyClass {
        fun double(n: Int): Int = n * 2
    }
    
    val foo = MyClass()
    val mutliplyBy2: (Int) -> Int = foo::double

    double이 다른 패키지에 들어 있다면 이를 임포트해야 한다.

    import other.package.double
    
    val mutliplyBy2: (Int) -> Int = ::double

    반면에 클래스 이름을 붙이면 전혀 다른 타입의 함수가 생긴다.

    val mutliplyBy2: (MyClass, Int) -> Int = MyClass::double // { obj: MyClass, n: Int -> (obj::double)(n) }과 같다.
    신간 소식 구독하기
    뉴스레터에 가입하시고 이메일로 신간 소식을 받아 보세요.