본문 바로가기
Language/Kotlin

클래스 리터럴이란?

by 시니성 2023. 8. 24.

안녕하세요, 오늘은 Java와 코틀린에서의 '클래스 리터럴'에 대해 알아보려 합니다. 클래스 리터럴이라는 용어에 익숙하지 않으신 분도 계실 텐데요. 그럼 바로 시작해보겠습니다!

1. 클래스 리터럴이란?

클래스 리터럴은 특정 클래스의 타입 정보를 담고 있는 객체입니다. 이는 프로그램 실행 중에 해당 클래스의 구조나 특성에 동적으로 접근할 때 사용되는 리플렉션(reflection)의 핵심 요소 중 하나입니다.

2. Java에서의 클래스 리터럴

Java에서는 .class 문법을 통해 클래스 리터럴에 접근할 수 있습니다.

// Java의 클래스 리터럴 예시
Class<String> stringClass = String.class;
System.out.println(stringClass.getName());  // 출력: java.lang.String

주석에서 볼 수 있듯이, .getName() 메서드를 통해 해당 클래스의 완전한 이름을 출력할 수 있습니다.

3. 코틀린에서의 클래스 리터럴

코틀린은 ::class 문법을 사용해 클래스 리터럴을 얻습니다.

// 코틀린의 클래스 리터럴 예시
val stringKClass = String::class
println(stringKClass.qualifiedName)  // 출력: kotlin.String

코틀린에서는 .qualifiedName 프로퍼티를 통해 클래스의 완전한 이름을 얻을 수 있습니다.

4. 코틀린에서 KClass 활용하기

코틀린의 ::class 문법을 사용하면, KClass 타입의 객체를 반환받게 됩니다. 이 객체는 해당 클래스의 메타데이터에 대한 정보를 제공합니다.

// 코틀린에서의 KClass 활용 예시
data class Person(val name: String, val age: Int)

val personKClass = Person::class

// 클래스 이름 조회
println(personKClass.simpleName)  // 출력: Person

// 속성 조회
personKClass.memberProperties.forEach { property ->
    println(property.name)  // 출력: name, age 순서대로 출력됩니다.
}

simpleName은 클래스의 이름을, memberProperties는 클래스 내의 속성들을 조회할 때 사용됩니다.

마치며...

클래스 리터럴을 통해 프로그램 실행 중에도 특정 클래스의 구조와 특성을 동적으로 조사하거나 조작하는 것이 가능합니다. 특히 API 개발에서 애노테이션의 속성값으로 클래스 리터럴을 전달하는 경우가 종종 있으므로, 이를 이해하고 활용하는 것은 매우 중요합니다.

여러분이 개발하시면서 클래스 리터럴이나 리플렉션에 관한 더 깊은 내용을 알게 되신다면, 공유해 주시면 감사하겠습니다!