'::' 리플렉션(Reflection) 연산자

소정·2024년 8월 28일
0

Kotlin

목록 보기
29/40

:: 리플렉션 연산자란?

클래스, 함수, 프로퍼티 등의 참조를 표현하는 데 사용
객체를 통해 클래스의 정보를 분석해 내는 프로그램 기법

1. 클래스 참조 (Class Reference)

KClass 타입의 객체로, 클래스의 메타데이터(예: 클래스 이름, 프로퍼티, 메서드 등)에 접근할 수 있다.

KClass 타입

Kotlin에서 클래스의 정보를 표현하는 타입
클래스의 이름(패키지 포함/미포함), 멤버, 생성자 등에 접근 가능
기본 생성자가 있는 경우 인스턴스를 생성가능
해당 클래스에 작성된 모든 것에 접근 가능
Java의 Class<T>와 유사

val stringClass: KClass = String::class

val wishClass = Wish::class
println(wishClass.simpleName)  // "Wish"

2. 함수 참조 (Function Reference)

  • ::functionName과 같은 형태로 함수 참조
  • 함수 참조는 특정 함수의 정의를 참조하는 데 사용되며, 이 참조를 통해 함수를 나중에 호출할 수 있다.
fun greet(name: String) = "Hello, $name"

val greetFunction = ::greet
println(greetFunction("John"))  // "Hello, John"

3. 프로퍼티 참조 (Property Reference)

  • ::propertyName과 같은 형태로 프로퍼티 참조
  • 프로퍼티 참조는 특정 프로퍼티의 값을 읽거나 쓸 수 있는 참조를 제공
val name = "Kotlin"

val nameRef = ::name
println(nameRef.get())  // "Kotlin"

4. Room에서의 사용 (Room Database)

  • @Database 어노테이션에서 entities = [Wish::class]와 같이 사용하는 것은 Wish 클래스의 참조를 전달하여 Room 라이브러리에서 이 클래스를 엔티티로 사용하도록 지시
  • Wish::class는 Room이 해당 클래스를 데이터베이스 테이블로 인식
@Database(entities = [Wish::class], version = 1)
abstract class WishDatabase : RoomDatabase() {
    abstract fun wishDao(): WishDao
}

profile
보조기억장치

0개의 댓글