본문 바로가기

Kotlin

[Kotlin] invoke 란?

728x90
반응형
관례(convention) :  특별한 이름이 붙은 함수를 일반 메소드 호출 구문으로 호출하지 않고 더 간단한
다른 구문으로 호출할 수 있게 지원하는 기능

 

 

invoke 는 함수처럼 호출할 수 있는 객체다.

 

 

 

 

 

 

 - 클래스 안에서 invoke 메소드 정의 방법

class Hi (val hello: String) {
	operator fun invoke(name: String) {
    	println("$hello, $name!")
        }
}

 -> Hi 클래스 안에서 invoke 메소드를 정의한다. Hi 인스턴스를 함수처럼 호출할 수 있음!

 

 

 

 

 

 

 

 

 

 - 람다와 invoke 관계

 

 람다는 함수형 인터페이스를 구현하는 클래스로 컴파일된다. 각 함수형 인터페이스 안에는 그 인터페이스 이름이 가리키는 개수만큼 파라미터를 받는 invoke 메소드가 들어있다.

interface Function<in a, in b, out C> {
	operator fun invoke(a : A, b : B): C
 }

 -> 람다를 함수처럼 호출하면 이 관례에 따라 invoke 메소드 호출로 변환된다. (함수 타입을 확장하며 invoke() 오버라이딩을 하면, 복잡해서 한 람다로 표현하기 어려운 코드를 리팩토링 할 수 있다.)

 

 

 

 

 

 

 

 

 

- DSL(Domain-specific Language)과 invoke 관계

 

 gradle에서 모듈 의존관계를 정의

dependencies.invoke({
	this.compile("org.jetbrains.kotlin:kotlin-reflect:?.?.?")
 })

 

 -> invoke 메소드로 인해 DSL API 유연성이 훨씬 커진다. 

728x90
반응형