Reflection

๊ฐ„๋‹จํ•˜๊ฒŒ๋งŒ ์งš๊ณ  ๊ฐ‘๋‹ˆ๋‹ค.

์šฐํ…Œ์ฝ” ํ”ผ๋“œ๋ฐฑ

์šฐํ…Œ์ฝ” ํ”„๋ฆฌ์ฝ”์Šค์— ์ด๋Ÿฌํ•œ ํ”ผ๋“œ๋ฐฑ์ด ์žˆ์—ˆ๋‹ค.

private ํ•จ์ˆ˜๋ฅผ ํ…Œ์ŠคํŠธํ•˜๊ณ  ์‹ถ๋‹ค๋ฉด ํด๋ž˜์Šค ๋ถ„๋ฆฌ๋ฅผ ๊ณ ๋ คํ•œ๋‹ค. priavate method๊ฐ€ ๊ฐ€๋…์„ฑ ์ด์ƒ์˜ ์—ญํ• ์„ ํ•˜๋Š” ๊ฒฝ์šฐ ๋‹ค๋ฅธ ์—ญํ• ์„ ์ˆ˜ํ–‰ํ•˜๋Š” ๋‹ค๋ฅธ ๊ฐ์ฒด๋ฅผ ๋งŒ๋“ค ํƒ€์ด๋ฐ์ด ์•„๋‹์ง€ ๊ณ ๋ คํ•ด๋ผ. ์ฆ‰,

  • priavate ํ•จ์ˆ˜๋ฅผ ํ…Œ์ŠคํŠธ ํ•˜๊ณ  ์‹ถ๋‹ค๋ฉด ํด๋ž˜์Šค ๋ถ„๋ฆฌ๋ฅผ ๊ณ ๋ คํ•œ๋‹ค.

  • ๊ฐ€๋…์„ฑ์„ ์ด์œ ๋กœ ๋ถ„๋ฆฌํ•œ private ํ•จ์ˆ˜๋Š” public ๊ฒ€์ฆ์ด ๊ฐ€๋Šฅํ•˜๋‹ค. ๋˜ํ•œ public ํ•จ์ˆ˜ ๋‚ด์—์„œ ์‚ฌ์šฉ๋˜๊ธฐ ๋•Œ๋ฌธ์— ์ž์—ฐ์Šค๋ ˆ ํ…Œ์ŠคํŠธ ๋ฒ”์œ„์— ํฌํ•จ ๋  ์ˆ˜ ์žˆ๋‹ค.

  • ํ•˜์ง€๋งŒ ๊ฐ€๋…์„ฑ ์ด์ƒ์œผ๋กœ ๋งŽ์€ ์ฑ…์ž„์„ ๊ฐ€์ง€๊ณ  ์žˆ๋‹ค๋ฉด ๋‹จ์ผ ์ฑ…์ž„์— ๋งž๊ฒŒ ํ•จ์ˆ˜๋ฅผ ๋ถ„๋ฆฌํ•ด์•ผ ํ•˜๋„๋ก ๊ณ ๋ฏผํ•ด์•ผ ํ•œ๋‹ค.

ํ•˜์ง€๋งŒ ์˜ˆ์ „์— ํ…Œ์ŠคํŠธ ๊ด€๋ จ ๊ณต๋ถ€(Junit, Unit test, etc..)๋ฅผ ํ•˜๋‹ค๊ฐ€ Reflection๋„ ํฌํ•จ๋˜์–ด ์žˆ์—ˆ๋‹ค.

๊ทธ ๋‹น์‹œ ๋ญ”์ง€๋Š” ๋ชจ๋ฅด๊ฒ ์ง€๋งŒ ํด๋ž˜์Šค์— ์ง์ ‘์ ์œผ๋กœ ์ ‘๊ทผํ•ด์„œ ๋ฉ”์†Œ๋“œ๋‚˜ ๋ฉค๋ฒ„์— ์ ‘๊ทผ ํ–ˆ๋˜ ๊ธฐ์–ต์ด ์žˆ๋‹ค.

Reflection

๋ฆฌํ”Œ๋ ‰์…˜์€ ๊ตฌ์ฒด์ ์ธ Class Type์„ ์•Œ์ง€ ๋ชปํ•ด๋„ ํ•ด๋‹น Class์˜ ํƒ€์ž…, ๋ฉ”์†Œ๋“œ ๋ฉค๋ฒ„์— ์ ‘๊ทผํ•  ์ˆ˜ ์žˆ๋„๋ก ํ•ด์ฃผ๋Š” Java API๋ผ๊ณ  ํ•œ๋‹ค. ๋Ÿฐํƒ€์ž„์— ๋™์ ์œผ๋กœ ํŠน์ • Class ์ •๋ณด๋ฅผ ์ถ”์ถœํ•  ์ˆ˜ ์žˆ๋Š” ํ”„๋กœ๊ทธ๋ž˜๋ฐ ๊ธฐ๋ฒ•์ด๋‹ค.

ํŠน์ • ํด๋ž˜์Šค์˜ ๊ฐ์ฒด๋ฅผ ์–ป์–ด์˜ค๋Š” ๋ฐฉ๋ฒ•์€ ์—ฌ๋Ÿฌ๊ฐ€์ง€๊ฐ€ ์กด์žฌํ•œ๋‹ค.

  • ํด๋ž˜์Šค์ด๋ฆ„.class

  • ์ธ์Šคํ„ด์Šค ๊ฐ์ฒด์˜ getClass() method

  • Class.forName()

๋ฆฌํ”Œ๋ ‰์…˜ ์‚ฌ์šฉ๋ฒ•

์„ค๋ช…์„ ๋„ˆ๋ฌด ์ž˜ ํ•ด์ฃผ์…”์„œ ๊ทธ๋Œ€๋กœ ๊ฐ€์ ธ์™”๋‹ค.

Jackson, hibernate๋Š” ๋ฆฌํ”Œ๋ ‰์…˜์„ ์‚ฌ์šฉํ•˜๊ณ  ์žˆ๋‹ค. ๊ฐ์ฒด๋ฅผ json ํƒ€์ž…์œผ๋กœ ๋ณ€๊ฒฝํ•ด์ฃผ๋Š” jackson ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์˜ ObjectMapper๋ฅผ ์‚ดํŽด๋ณด์ž.

jackson์˜ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์ธ ObjectMapper๊ฐ€ ์–ด๋–ป๊ฒŒ Json์œผ๋กœ ๊ฒฐ๊ณผ๋ฅผ ๊ฐ€์ ธ์™”์„๊นŒ?

Person์ด๋ผ๋Š” ํด๋ž˜์Šค๊ฐ€ ์‚ฌ์šฉ์ž๋ฅผ ๋งŒ๋“ค ๊ฒƒ์ด๋ผ๊ณ  ์˜ˆ์ƒํ•˜๊ณ  getter๋ฅผ ์‚ฌ์šฉํ•ด์„œ ๊ฐ€์ ธ์™”์„๊นŒ?

์•„๋‹ˆ๋‹ค. ๋ฆฌํ”Œ๋ ‰์…˜ API๋ฅผ ์‚ฌ์šฉํ•ด์„œ Person์ด๋ผ๋Š” ํด๋ž˜์Šค ์ •๋ณด๋ฅผ ๋ฐ›์•„์˜จ๋‹ค. ๊ทธ๋ฆฌ๊ณ  โ€œgetโ€์œผ๋กœ ์‹œ์ž‘ํ•˜๋Š” ๋ฉ”์†Œ๋“œ๋ฅผ ์ฐพ์•„์˜จ ๋’ค ํ•„๋“œ๊ฐ’์— ์ ‘๊ทผํ•ด์„œ json ํ˜•์‹์œผ๋กœ ๋ฐ์ดํ„ฐ๋ฅผ ๋ณ€ํ™˜ํ•ด์ฃผ๊ธฐ ๋•Œ๋ฌธ์— ์šฐ๋ฆฌ๋Š” ์ธ์Šคํ„ด์Šค๋งŒ ๋„˜๊ฒจ์ฃผ๋ฉด ๋œ๋‹ค.

๋ฆฌํ”Œ๋ ‰์…˜์„ ์ง€์–‘ํ•œ๋‹ค.

  • private method์— ์ ‘๊ทผํ•ด์„œ ํ…Œ์ŠคํŠธ๋Š” ๊ฐ€๋Šฅํ•˜์ง€๋งŒ, ๊ถŒ์žฅํ•˜์ง€ ์•Š๋Š”๋‹ค.

  • ๋ฆฌํ”Œ๋ ‰์…˜์„ ํ†ตํ•œ ์ ‘๊ทผ์€ ์ปดํŒŒ์ผ ํƒ€์ž„์— ์—๋Ÿฌ๋ฅผ ์žก๊ธฐ ์–ด๋ ต๊ณ , ์ฝ”๋“œ ๋ณ€๊ฒฝ์ด๋‚˜ ๋ฆฌํŒฉํ† ๋ง ์‹œ ๋Ÿฐํƒ€์ž„ ์—๋Ÿฌ๊ฐ€ ๋ฐœ์ƒํ•  ๊ฐ€๋Šฅ์„ฑ์ด ํฌ๋‹ค.

  • ํŠนํžˆ ๋ฉ”์„œ๋“œ์˜ ์ด๋ฆ„์ด๋‚˜ ํŒŒ๋ผ๋ฏธํ„ฐ๊ฐ€ ๋ณ€๊ฒฝ๋˜๋ฉด ๋ณ€๊ฒฝ์— ๋Œ€ํ•œ ์ •๋ณด๋ฅผ ๋ฐ˜์˜ํ•˜์ง€ ๋ชปํ•œ๋‹ค.

  • ๋ฆฌํ”Œ๋ ‰์…˜์„ ์‚ฌ์šฉํ•˜๋ฉด ํด๋ž˜์Šค ๋‚ด๋ถ€ ๊ตฌ์กฐ์— ์˜์กดํ•˜๊ฒŒ ๋˜์–ด์„œ ํด๋ž˜์Šค์˜ ๊ตฌํ˜„์ด ๋ณ€๊ฒฝ๋˜๋ฉด ํ…Œ์ŠคํŠธ ์ฝ”๋“œ๋„ ํ•จ๊ป˜ ์ˆ˜์ •๋˜์–ด์•ผ ํ•œ๋‹ค. ์ด๋Š” ๊ฒฐํ•ฉ๋„๊ฐ€ ๋†’์•„์ ธ ์œ ์ง€๋ณด์ˆ˜๋ฅผ ์–ด๋ ต๊ฒŒ ๋งŒ๋“ ๋‹ค.

Last updated