Skip to content

Reflection

yujin45 edited this page Nov 7, 2024 · 1 revision

Kotlin์—์„œ ๋ฆฌํ”Œ๋ ‰์…˜(Reflection)

  • ํ”„๋กœ๊ทธ๋žจ์ด ๋Ÿฐํƒ€์ž„์— ์ž์‹ ์˜ ๊ตฌ์กฐ๋ฅผ ์กฐ์‚ฌํ•˜๊ณ  ์กฐ์ž‘ํ•  ์ˆ˜ ์žˆ๋Š” ๊ธฐ๋Šฅ์„ ์˜๋ฏธ
  • ์ฝ”๋“œ ์‹คํ–‰ ์ค‘์— ํด๋ž˜์Šค, ํ•จ์ˆ˜, ํ”„๋กœํผํ‹ฐ ๋“ฑ์˜ ๋ฉ”ํƒ€๋ฐ์ดํ„ฐ์— ์ ‘๊ทผํ•˜๊ฑฐ๋‚˜ ์ˆ˜์ •ํ•  ์ˆ˜ ์žˆ๋‹ค.
import kotlin.reflect.full.*

data class Person(val name: String, val age: Int)

fun main() {
    val person = Person("Alice", 30)
    val kClass = person::class

    // ํด๋ž˜์Šค ์ด๋ฆ„ ์ถœ๋ ฅ
    println("ํด๋ž˜์Šค ์ด๋ฆ„: ${kClass.simpleName}")

    // ๋ชจ๋“  ํ”„๋กœํผํ‹ฐ ์ •๋ณด ์ถœ๋ ฅ
    kClass.memberProperties.forEach { property ->
        println("ํ”„๋กœํผํ‹ฐ ์ด๋ฆ„: ${property.name}, ํƒ€์ž…: ${property.returnType}")
    }

    // ํŠน์ • ํ”„๋กœํผํ‹ฐ ๊ฐ’ ๊ฐ€์ ธ์˜ค๊ธฐ
    val nameProperty = kClass.memberProperties.find { it.name == "name" }
    println("์ด๋ฆ„: ${nameProperty?.get(person)}")
}
  • ์œ„์ฒ˜๋Ÿผ ํ”„๋กœ๊ทธ๋žจ์ด ์‹คํ–‰ ์ค‘์— ์ž์‹ ์˜ ๊ตฌ์กฐ๋ฅผ ๊ฒ€์‚ฌํ•˜๊ณ  ์ˆ˜์ •ํ•  ์ˆ˜ ์žˆ๋Š” ๊ฒƒ
  • ์ด๋ฅผ ํ†ตํ•ด ํด๋ž˜์Šค, ๋ฉ”์„œ๋“œ, ํ•„๋“œ ๋“ฑ์˜ ์ •๋ณด๋ฅผ ๋Ÿฐํƒ€์ž„์— ๋™์ ์œผ๋กœ ์กฐํšŒํ•˜๊ฑฐ๋‚˜ ์กฐ์ž‘ ๊ฐ€๋Šฅ
  • ํ”„๋ ˆ์ž„์›Œํฌ๋‚˜ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์—์„œ ๋™์  ๊ธฐ๋Šฅ์„ ๊ตฌํ˜„ํ•˜๋Š” ๋ฐ ์œ ์šฉ
  • ๋Ÿฐํƒ€์ž„์— ๊ฐ์ฒด๋ฅผ ์ƒ์„ฑํ•˜๊ณ  ์˜์กด์„ฑ์„ ์ฃผ์ž…ํ•˜๋Š” ๋“ฑ

๋ฆฌํ”Œ๋ ‰์…˜์œผ๋กœ ๋™์  ๊ฐ์ฒด ์ƒ์„ฑ

  • ํด๋ž˜์Šค ์ด๋ฆ„์ด๋‚˜ ํƒ€์ž… ์ •๋ณด๋ฅผ ๋ฌธ์ž์—ด๋กœ ๋ฐ›์•„ ๋Ÿฐํƒ€์ž„์— ํ•ด๋‹น ํด๋ž˜์Šค๋ฅผ ๋กœ๋“œํ•˜๊ณ  ์ธ์Šคํ„ด์Šค๋ฅผ ์ƒ์„ฑํ•˜๋Š” ๊ฒƒ

    import kotlin.reflect.full.createInstance
    
    fun main() {
        val className = "com.example.MyClass"
        val kClass = Class.forName(className).kotlin
        val instance = kClass.createInstance()
        println("Created instance: $instance")
    }
    
    • โ–ฒ ํด๋ž˜์Šค ์ด๋ฆ„์„ ๋ฌธ์ž์—ด๋กœ ๋ฐ›์•„ ํ•ด๋‹น ํด๋ž˜์Šค๋ฅผ ๋กœ๋“œํ•˜๊ณ  ์ธ์Šคํ„ด์Šค๋ฅผ ์ƒ์„ฑ
    • ๋ฆฌํ”Œ๋ ‰์…˜์„ ์‚ฌ์šฉํ•˜๋ฉด ์ปดํŒŒ์ผ ์‹œ์ ์— ๊ตฌ์ฒด์ ์ธ ํด๋ž˜์Šค ํƒ€์ž…์„ ์•Œ์ง€ ๋ชปํ•ด๋„, ๋Ÿฐํƒ€์ž„์— ํ•„์š”ํ•œ ๊ฐ์ฒด๋ฅผ ๋™์ ์œผ๋กœ ์ƒ์„ฑํ•˜๊ณ  ์‚ฌ์šฉ ๊ฐ€๋Šฅ

https://kotlinlang.org/docs/reflection.html


๐ŸŽจ ๊ธฐํš ๋ฐ ๋””์ž์ธ


โค๏ธ ๊ทธ๋ผ์šด๋“œ ๋ฃฐ


๐Ÿ“š ๋ฌธ์„œ


๐Ÿ“‘ ๋ฏธํŒ… ๊ธฐ๋ก

๋ฐ์ผ๋ฆฌ ์Šคํฌ๋Ÿผ

1์ฃผ์ฐจ

2์ฃผ์ฐจ

3์ฃผ์ฐจ

4์ฃผ์ฐจ

5์ฃผ์ฐจ

ํšŒ์˜๋ก

1์ฃผ์ฐจ

2์ฃผ์ฐจ

3์ฃผ์ฐจ

4์ฃผ์ฐจ

5์ฃผ์ฐจ


Clone this wiki locally