Reflection - boostcampwm-2024/and04-Nature-Album GitHub Wiki
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") }
- β² ν΄λμ€ μ΄λ¦μ λ¬Έμμ΄λ‘ λ°μ ν΄λΉ ν΄λμ€λ₯Ό λ‘λνκ³ μΈμ€ν΄μ€λ₯Ό μμ±
- 리νλ μ μ μ¬μ©νλ©΄ μ»΄νμΌ μμ μ ꡬ체μ μΈ ν΄λμ€ νμ μ μμ§ λͺ»ν΄λ, λ°νμμ νμν κ°μ²΄λ₯Ό λμ μΌλ‘ μμ±νκ³ μ¬μ© κ°λ₯