Reflection

λ¦¬ν”Œλ ‰μ…˜(Reflection)

객체의 ꡬ체적인 클래슀 νƒ€μž…μ„ μ•Œμ§€ λͺ»ν•΄λ„ ν•΄λ‹Ή 클래슀의 정보(ν•„λ“œ, λ©”μ†Œλ“œ λ“±)에 μ ‘κ·Όν•  수 μžˆλ„λ‘ ν•˜λŠ” 기법

Javaμ—μ„œλŠ” Reflection APIλ₯Ό μ œκ³΅ν•˜μ—¬ λ¦¬ν”Œλ ‰μ…˜ 기법을 μ΄μš©ν•  수 μžˆλ„λ‘ 함

Java Reflection APIλ₯Ό 톡해 ν•  수 μžˆλŠ” 일

  • 클래슀 μ–»μ–΄μ˜€κΈ°

  • λ©”μ†Œλ“œ μ–»μ–΄μ˜€κΈ°

  • λ©”μ†Œλ“œ λͺ©λ‘(λ°°μ—΄) μ–»μ–΄μ˜€κΈ°

  • λ©”μ†Œλ“œ μ‹€ν–‰ν•˜κΈ°

  • ν•„λ“œ μ–»μ–΄μ˜€κΈ°

  • ν•„λ“œ λͺ©λ‘(λ°°μ—΄) μ–»μ–΄μ˜€κΈ°

  • μƒμ„±μž μ–»μ–΄μ˜€κΈ°

  • μƒμ„±μžλ₯Ό ν†΅ν•œ μΈμŠ€ν„΄μŠ€ 생성

  • 기타 λ“±λ“±

λ™μž‘ 원리

λŸ°νƒ€μž„μ— JVM이 JVM memory area 쀑 static area에 μ €μž₯된 클래슀 정보λ₯Ό νƒμƒ‰ν•˜κ³ , 이λ₯Ό μ΄μš©ν•œλ‹€.

μ–Έμ œ μ‚¬μš©ν•˜λŠ”κ°€?

λ¦¬ν”Œλ ‰μ…˜μ€ ꡬ체적인 클래슀 νƒ€μž…μ— μ ‘κ·Όν•˜κ²Œ ν•¨μœΌλ‘œμ¨ λ‹€ν˜•μ„±, μΊ‘μŠν™”λ₯Ό μΉ¨ν•΄ν•˜λ©°, 컴파일 νƒ€μž„μ΄ μ•„λ‹Œ λŸ°νƒ€μž„μ— μ½”λ“œ μ˜μ—­μ— μ ‘κ·Όν•˜μ—¬ 동적 타이핑을 μˆ˜ν–‰ν•¨μœΌλ‘œμ¨ JVM의 μ„±λŠ₯ μ΅œμ ν™”λ₯Ό λ°©ν•΄ν•œλ‹€λŠ” 단점이 μ‘΄μž¬ν•œλ‹€.

λ•Œλ¬Έμ— λ‹¨μˆœνžˆ ν”„λ‘œκ·Έλž¨μ„ μž‘μ„±ν•  λ•Œμ—λŠ” μ‚¬μš©ν•˜μ§€ μ•ŠλŠ” 것이 μ’‹μœΌλ©°, 라이브러리, ν”„λ ˆμž„μ›Œν¬μ™€ 같이 μ‚¬μš©μžκ°€ μ–΄λ–€ 클래슀 νƒ€μž…μ„ μ΄μš©ν• μ§€ μ•Œ 수 μ—†λŠ” λ²”μš© λͺ¨λ“ˆμ„ μž‘μ„±ν•  λ•Œ 주둜 μ‚¬μš©ν•œλ‹€.

Spring의 Reflection μ‚¬μš©μ²˜

⭐ Reflection APIλŠ” μƒμ„±μžμ˜ 인자 μ •λ³΄λŠ” νšλ“ν•  수 μ—†λ‹€. λ”°λΌμ„œ, Springκ³Ό 같이 νƒ€μž…μ„ μ•Œ 수 μ—†λŠ” μƒνƒœμ—μ„œ λ™μ μœΌλ‘œ 객체λ₯Ό μƒμ„±ν•˜κΈ° μœ„ν•΄ λ¦¬ν”Œλ ‰μ…˜μ„ μ‚¬μš©ν•˜λŠ” 경우, λ°˜λ“œμ‹œ ν•΄λ‹Ή 클래슀 내에 κΈ°λ³Έ μƒμ„±μžκ°€ μ‘΄μž¬ν•΄μ•Όλ§Œ 객체λ₯Ό 생성할 수 μžˆλ‹€.

좜처

Last updated