Skip to content

Latest commit

Β 

History

History
20 lines (11 loc) Β· 1.45 KB

[Java] Reflection.md

File metadata and controls

20 lines (11 loc) Β· 1.45 KB

Reflection

  • μžλ°”μ—μ„œ 이미 λ‘œλ”©μ΄ μ™„λ£Œλœ ν΄λž˜μŠ€μ—μ„œ λ˜λŠ” λ‹€λ₯Έ 클래슀λ₯Ό λ™μ μœΌλ‘œ λ‘œλ”©ν•˜μ—¬ ꡬ체적인 νƒ€μž…μ„ μ•Œμ§€ λͺ»ν•˜λ”라도 μƒμ„±μž, 멀버 ν•„λ“œ, 그리고 멀버 λ©”μ†Œλ“œλ₯Ό μ‚¬μš©ν•  수 μžˆλŠ” 기법이닀.
  • 객체λ₯Ό ν†΅ν•΄μ„œ 클래슀의 νŒ¨ν‚€μ§€ 정보, μ ‘κ·Ό μ§€μ •μž, λΆ€λͺ¨ 클래슀, μ–΄λ…Έν…Œμ΄μ…˜ 등을 얻을 수 μžˆλ‹€.
  • 즉, 핡심은 컴파일 νƒ€μž„μ΄ μ•„λ‹ˆλΌ λŸ°νƒ€μž„μ— λ™μ μœΌλ‘œ νŠΉμ • 클래슀의 정보λ₯Ό κ°μ²΄ν™”ν•˜μ—¬ 뢄석 및 μΆ”μΆœν•΄λ‚Ό 수 μžˆλŠ” ν”„λ‘œκ·Έλž˜λ° 기법이닀.

[μ‚¬μš©ν•˜λŠ” μ΄μœ λŠ”?]

  • μ‹€ν–‰ μ‹œκ°„(Runtime)에 λ‹€λ₯Έ 클래슀λ₯Ό λ™μ μœΌλ‘œ λ‘œλ”©ν•˜μ—¬ μ ‘κ·Όν•  ν•„μš”κ°€ μžˆμ„ λ•Œ.
  • ν΄λž˜μŠ€μ™€ 멀버 ν•„λ“œ 그리고 λ©”μ†Œλ“œ 등에 κ΄€ν•œ 정보λ₯Ό μ–»μ–΄μ•Όν•  λ•Œ.
  • λ¦¬ν”Œλ ‰μ…˜ 없이도 완성도 높은 μ½”λ“œλ₯Ό κ΅¬ν˜„ν•  수 μžˆμ§€λ§Œ, μ‚¬μš©ν•œλ‹€λ©΄ 쑰금 더 μœ μ—°ν•œ μ½”λ“œλ₯Ό λ§Œλ“€ 수 μžˆλ‹€.

[μ£Όμ˜ν•  점]

  • 외뢀에 κ³΅κ°œλ˜μ§€ μ•ŠλŠ” private 멀버도 Field.setAccessibile() λ©”μ†Œλ“œλ₯Ό 톡해 true둜 μ§€μ •ν•˜λ©΄ μ ‘κ·Όκ³Ό μ‘°μž‘μ΄ κ°€λŠ₯ν•˜κΈ° λ•Œλ¬Έμ— μ£Όμ˜ν•΄μ„œ μ‚¬μš©ν•΄μ•Ό ν•œλ‹€.
  • Reflectionμ—λŠ” λ™μ μœΌλ‘œ ν•΄μ„λ˜λŠ” μœ ν˜•μ΄ ν¬ν•¨λ˜λ―€λ‘œ νŠΉμ • JVM μ΅œμ ν™”λ₯Ό μˆ˜ν–‰ν•  수 μ—†λ‹€. λ”°λΌμ„œ Reflection μž‘μ—…μ΄ λΉ„ Reflection μž‘μ—…λ³΄λ‹€ μ„±λŠ₯이 떨어지며, μ„±λŠ₯에 λ―Όκ°ν•œ μ• ν”Œλ¦¬μΌ€μ΄μ…˜μ—μ„œ 자주 ν˜ΈμΆœλ˜λŠ” μ½”λ“œμ—” μ‚¬μš©ν•˜μ§€ μ•Šμ•„μ•Ό ν•œλ‹€.