-
Notifications
You must be signed in to change notification settings - Fork 1
Reflection
yujin45 edited this page Nov 7, 2024
·
1 revision
- ํ๋ก๊ทธ๋จ์ด ๋ฐํ์์ ์์ ์ ๊ตฌ์กฐ๋ฅผ ์กฐ์ฌํ๊ณ ์กฐ์ํ ์ ์๋ ๊ธฐ๋ฅ์ ์๋ฏธ
- ์ฝ๋ ์คํ ์ค์ ํด๋์ค, ํจ์, ํ๋กํผํฐ ๋ฑ์ ๋ฉํ๋ฐ์ดํฐ์ ์ ๊ทผํ๊ฑฐ๋ ์์ ํ ์ ์๋ค.
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") }
- โฒ ํด๋์ค ์ด๋ฆ์ ๋ฌธ์์ด๋ก ๋ฐ์ ํด๋น ํด๋์ค๋ฅผ ๋ก๋ํ๊ณ ์ธ์คํด์ค๋ฅผ ์์ฑ
- ๋ฆฌํ๋ ์ ์ ์ฌ์ฉํ๋ฉด ์ปดํ์ผ ์์ ์ ๊ตฌ์ฒด์ ์ธ ํด๋์ค ํ์ ์ ์์ง ๋ชปํด๋, ๋ฐํ์์ ํ์ํ ๊ฐ์ฒด๋ฅผ ๋์ ์ผ๋ก ์์ฑํ๊ณ ์ฌ์ฉ ๊ฐ๋ฅ
๋ฐ์ผ๋ฆฌ ์คํฌ๋ผ
1์ฃผ์ฐจ
2์ฃผ์ฐจ
3์ฃผ์ฐจ
4์ฃผ์ฐจ
5์ฃผ์ฐจ
ํ์๋ก
1์ฃผ์ฐจ
2์ฃผ์ฐจ
3์ฃผ์ฐจ
4์ฃผ์ฐจ
5์ฃผ์ฐจ