관련 개념인 리플렉션에 대해 간단히 설명 후 더블 콜론에 대해 설명하겠습니다
클래스::class의 형태, KClass<*> 타입call(), 타입이 고정된 경우에는 invoke() 사용KProperty<T>, var 프로퍼티는 KMutableProperty<T>로 표현call()은 내부적으로 프로퍼티의 getter를 호출하지만 타입 안정성이 떨어지므로 get() 추천invoke()호출fun sum(x:Int, y:Int):Int=x+y
fun funcParam(a:Int, b:Int, c:(Int,Int)->Int):Int{return c(a,b)}
funcParam(3,2, ::sum)// 함수 참조로 전달
.get()과 .set() 메서드를 사용하여 값을 읽거나 쓰기 가능val message: String = "Hello, Kotlin!"
fun main() {
val propertyRef = ::message // KProperty<String>
println(propertyRef.name) // 출력: message
println(propertyRef.get()) // 출력: Hello, Kotlin!
}
fun greet(name: String): String = "Hello, $name!"
fun main() {
val functionRef = ::greet // KFunction<String>
println(functionRef.name) // 출력: greet
println(functionRef.call("Kotlin")) // 출력: Hello, Kotlin!
}
class Person(val name: String, val age: Int)
fun main() {
val kClass = Person::class // KClass<Person>
println(kClass.simpleName) // 출력: Person
println(kClass.constructors) // 생성자 정보 출력
}
| 특징 | a::b (함수 참조) | a.b() (함수 호출) |
|---|---|---|
| 동작 | 함수나 메서드의 참조를 생성 | 함수나 메서드를 즉시 실행 |
| 사용 시점 | 나중에 실행하기 위해 참조를 전달하거나 저장할 때 | 즉시 결과를 얻고자 할 때 |
| 사용 위치 | 고차 함수, 지연 실행, 콜백 전달 등 | 일반적인 함수나 메서드 호출 |
| 결과 | KFunction 타입의 참조 반환 | 함수의 반환 값 반환 |
| 예제 | a::b | a.b() |