์ƒ์„ธ ์ปจํ…์ธ 

๋ณธ๋ฌธ ์ œ๋ชฉ

[Java] Reflection

๐Ÿ˜Ž ์ง€์‹ in Action/Java & Kotlin

by :ํ•ดํ”ผ๋ž˜๋น—๐Ÿพ 2024. 1. 6. 21:07

๋ณธ๋ฌธ

Reflection (๋ฆฌํ”Œ๋ ‰์…˜)

ํž™ ์˜์—ญ์— ๋กœ๋“œ๋˜์–ด ์žˆ๋Š” ํด๋ž˜์Šค ํƒ€์ž…์˜ ๊ฐ์ฒด๋ฅผ ํ†ตํ•ด

ํ•„๋“œ/๋ฉ”์†Œ๋“œ/์ƒ์„ฑ์ž๋ฅผ ์ ‘๊ทผ ์ œ์–ด์ž์™€ ์ƒ๊ด€ ์—†์ด ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋„๋ก ์ง€์›ํ•˜๋Š” API

์ปดํŒŒ์ผ ์‹œ์ ์ด ์•„๋‹Œ ๋Ÿฐํƒ€์ž„ ์‹œ์ ์— ๋™์ ์œผ๋กœ ํŠน์ • ํด๋ž˜์Šค์˜ ์ •๋ณด๋ฅผ ์ถ”์ถœํ•ด๋‚ผ ์ˆ˜ ์žˆ์Œ

 

=> ํด๋ž˜์Šค๋กœ๋”๋ฅผ ํ†ตํ•ด ์ฝ์–ด์˜จ ํด๋ž˜์Šค ์ •๋ณด๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๊ธฐ์ˆ 

Class c = Class.forName("ํด๋ž˜์Šค์ด๋ฆ„");
// ๋ฉ”์†Œ๋“œ
Method[] m = c.getMethods();                     

// ํ•„๋“œ
Field[] f = c.getFields();

// ๊ตฌ์กฐ์ฒด
Constructor[] cs = c.getConstructors();
Class[] inter = c.getInterfaces();
Class superClass = c.getSuperclass();

 

Reflection์„ ์‚ฌ์šฉํ•ด์„œ ์Šคํ”„๋ง์—์„œ๋Š” ๋Ÿฐํƒ€์ž„ ์‹œ์— ๊ฐœ๋ฐœ์ž๊ฐ€ ๋“ฑ๋กํ•œ ๋นˆ์„ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์—์„œ ๊ฐ€์ ธ์™€ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค


ํ”„๋ ˆ์ž„์›Œํฌ ๋˜๋Š” ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ ๊ฐœ๋ฐœ์‹œ ์‚ฌ์šฉ๋จ

ex) Spring ํ”„๋ ˆ์ž„์›Œํฌ DI, Serialization/Deserialization ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ

1. ์ปดํฌ๋„ŒํŠธ ์Šค์บ” (Component Scan)

@Component ์–ด๋…ธํ…Œ์ด์…˜์„ ์‚ฌ์šฉํ•˜์—ฌ ํด๋ž˜์Šค๋ฅผ ์ปดํฌ๋„ŒํŠธ๋กœ ๋“ฑ๋กํ•œ๋‹ค.

 

์ปดํฌ๋„ŒํŠธ ์Šค์บ”์€ ์Šคํ”„๋ง์ด ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ์‹œ์ž‘ํ•  ๋•Œ ์ง€์ •๋œ ํŒจํ‚ค์ง€์—์„œ

@Component ๊ฐ€ ๋ถ™์€ ํด๋ž˜์Šค๋ฅผ ์ฐพ์•„์„œ ๊ฐ์ฒด๋ฅผ ์ƒ์„ฑํ•œ๋‹ค.

 

์ด๋•Œ ์Šคํ”„๋ง์€ ๋ฆฌํ”Œ๋ ‰์…˜์„ ์‚ฌ์šฉํ•˜์—ฌ ํด๋ž˜์Šค์˜ ์ •๋ณด๋ฅผ ์กฐํšŒํ•˜๊ณ  ๊ฐ์ฒด๋ฅผ ์ƒ์„ฑํ•œ๋‹ค.

 

2. ์˜์กด์„ฑ ์ฃผ์ž… (Dependency Injection)

์Šคํ”„๋ง์—์„œ๋Š” ์˜์กด์„ฑ ์ฃผ์ž…์„ ์‚ฌ์šฉํ•˜์—ฌ ๊ฐ์ฒด ๊ฐ„์˜ ์˜์กด ๊ด€๊ณ„๋ฅผ ๋А์Šจํ•˜๊ฒŒ ๊ฒฐํ•ฉํ•ฉ๋‹ˆ๋‹ค.

์˜์กด์„ฑ ์ฃผ์ž…์„ ์‚ฌ์šฉํ•˜๋ฉด ๊ฐ์ฒด ๊ฐ„์˜ ์˜์กด ๊ด€๊ณ„๋ฅผ ์„ค์ •ํ•˜๊ธฐ ์œ„ํ•ด ์ง์ ‘ ์ฝ”๋“œ๋ฅผ ์ž‘์„ฑํ•  ํ•„์š”๊ฐ€ ์—†์Šต๋‹ˆ๋‹ค.

์Šคํ”„๋ง์€ ๋ฆฌํ”Œ๋ ‰์…˜์„ ์‚ฌ์šฉํ•˜์—ฌ ์˜์กด ๊ด€๊ณ„๊ฐ€ ํ•„์š”ํ•œ ํด๋ž˜์Šค์˜ ์ƒ์„ฑ์ž๋ฅผ ํ˜ธ์ถœํ•˜๊ณ  ํ•„์š”ํ•œ ๊ฐ์ฒด๋ฅผ ์ฃผ์ž…ํ•ฉ๋‹ˆ๋‹ค.

 

3. AOP (Aspect Oriented Programming)

์Šคํ”„๋ง์—์„œ๋Š” AOP๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์˜ ์—ฌ๋Ÿฌ ๋ถ€๋ถ„์— ๊ณตํ†ต์œผ๋กœ ์ ์šฉ๋˜๋Š” ๊ธฐ๋Šฅ์„ ๋ชจ๋“ˆํ™”ํ•œ๋‹ค

AOP๋Š” ํ”„๋ก์‹œ ๊ฐ์ฒด๋ฅผ ์ƒ์„ฑํ•˜์—ฌ ํ•ต์‹ฌ ๋กœ์ง์„ ์‹คํ–‰ํ•˜๊ธฐ ์ „๊ณผ ํ›„์— ๊ณตํ†ต์œผ๋กœ ์ˆ˜ํ–‰ํ•  ์ฝ”๋“œ๋ฅผ ์ถ”๊ฐ€ํ•œ๋‹ค

์ด๋•Œ ์Šคํ”„๋ง์€ ๋ฆฌํ”Œ๋ ‰์…˜์„ ์‚ฌ์šฉํ•˜์—ฌ ํ”„๋ก์‹œ ๊ฐ์ฒด๋ฅผ ์ƒ์„ฑํ•˜๊ณ  ํ•„์š”ํ•œ ๋ฉ”์†Œ๋“œ๋ฅผ ํ˜ธ์ถœํ•œ๋‹ค

728x90

๊ด€๋ จ๊ธ€ ๋”๋ณด๊ธฐ