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
반응형
'Kotlin' 카테고리의 다른 글
[Kotlin] Kotlin in Action 1장. 코틀린이란 무엇이며, 왜 필요한가? (0) | 2023.03.09 |
---|---|
[Kotlin] 코틀린 리스트 생성 방법 (0) | 2022.03.30 |
[Kotlin] 1. 코틀린 기초 (0) | 2022.03.04 |