getClass¸Þ¼µå´Â ÇØ´ç °´Ã¼ÀÇ Class Ŭ·¡½º¸¦ ¸®ÅÏÇÕ´Ï´Ù. ƯÁ¤°´Ã¼ÀÇ ClassŬ·¡½º°¡ ¹»±î¿ä. À̸»À» ÀÌÇØÇÑ´Ù¸é ¿©·¯ºÐµéÀº »ó´çÇÑ ÀÚ¹ÙÀÇ °æÁö¿¡ À̸£°Ô µÉ°Ì´Ï´Ù.
n Class Ŭ·¡½º¶õ?
Ŭ·¡½ºÀÇ Á¤º¸¸¦ ÀǹÌÇÕ´Ï´Ù. ¿©±â¼ Ŭ·¡½º¿¡ ´ëÇÑ Á¤º¸¶õ ¾î¶² ¸â¹öÇʵå¿Í ¸â¹ö ¸Þ¼µå¸¦ °¡Áö°í Àִ°¡? Á¢±ÙÁöÁ¤Àº ¾î¶»°Ô µÇ¾îÀִ°¡? »ý¼ºÀÚ¿Í »óÀ§Å¬·¡½º´Â ¹«¾ùÀΰ¡? ÀÎÅÍÆäÀ̽º¸¦ ±¸ÇöÇߴ°¡?µî ¸ðµç Ŭ·¡½ºÀÇ Á¤º¸¸¦ ClassŬ·¡½º¸¦ ÀÌ¿ëÇØ¼ ¾Ë ¼ö ÀÖ½À´Ï´Ù.
ClassŬ·¡½º¸¦ ¾î·Æ°Ô »ý°¢ÇÏÁö ¸¶½Ê½Ã¿À. º¸Åë ¿ì¸®°¡ .javaÆÄÀÏÀ» ÄÄÆÄÀÏÇÏ°í ³ª¸é ¹Ù·Î .class ÀÌ ³ðÀÌ Á¤º¸ Ŭ·¡½ºÀÔ´Ï´Ù. Á¤¸»ÀÔ´Ï´Ù. ´ÙÀ½ ±¸¹®À» Çѹø »ìÆì º¸½Ê½Ã¿À
n Class c1 = String.class
n Class c2 = Vector.class
¿©·¯ºÐÀÌ Top.javaÆÄÀÏÀ» ÄÄÆÄÀÏÇß´Ù¸é Top.classÆÄÀÏÀÌ »ý¼ºµÇ°ÚÁÒ. ±×·¸´Ù¸é ´ÙÀ½ ±¸¹®ÀÌ ¼º¸³ÇÕ´Ï´Ù.
n Class c3 = Top.class
Class class´Â ¿ì¸®°¡ compileÇÑ .classÆÄÀÏÀÇ Byte±× ÀÚüÀ̸ç .class´Â Ŭ·¡½ºÀÇ ¸ðµç Á¤º¸¸¦ ÀüºÎ Æ÷ÇÔÇϰí ÀÖ½À´Ï´Ù.
ÄÄÆÄÀÏ ÈÄÀÇ .classÆÄÀÏÀº Byte´ÜÀ§·Î ÀÌ·ç¾îÁ® ÀÖÀ¸¸ç ÀÌ Byte¸¦ Loading ÇÏ¿© ¸Þ¸ð¸®¿¡ ÀûÀçÇÏ°Ô µË´Ï´Ù. ¸ÕÀú .classÆÄÀÏÀ» ·ÎµùÀ» ÇØ¾ß °¡»ó¸Ó½Å¿¡¼ °´Ã¼¸¦ »ý¼ºÇÒ ¼ö ÀÖ½À´Ï´Ù. ±×·¸´Ù¸é ¸ðµç °´Ã¼´Â ÇϳªÀÇ ClassŬ·¡½º ´Ù½Ã¸»Çϸé .classÆÄÀÏÀ» ·ÎµùÇÑ ÈÄ »ý¼ºµÇ¾îÁö´Â °ÍÀÌ ¸Â°ÚÁÒ. ±×·±µ¥ ¿©·¯ºÐÀº Ŭ·¡½º Ŭ·¡½º¿Í °´Ã¼¸¦ ±¸ºÐÇÏ¼Å¾ß ÇÕ´Ï´Ù. óÀ½¿¡´Â ÀÌ °³³äÀ» ±¸ºÐÇÏ´Â °ÍÀÌ »ó´çÈ÷ ¾î·Æ½À´Ï´Ù. ¾Ë°í³ª¸é ´Ü¼øÇÏÁÒ.
¸ðµç Ŭ·¡½ºÀÇ ¿ø½ÃÀûÀÎ »óÅÂ, Áï Ŭ·¡½ºÀÇ Æ²Àº ClassŬ·¡½ºÀÇ ÇüÅ·ΠµÇ¾î ÀÖ½À´Ï´Ù. Áï µ¥ÀÌÅÍ Å¸ÀÔ ±× ÀÚüÁÒ. ±×¸®°í ÀÌ µ¥ÀÌÅÍŸÀÔÀ» º¸°í °´Ã¼¸¦ ¹«ÇÑÁ¤À¸·Î ¸¸µé ¼ö ÀÖ´Â °ÍÀÌÁö¿ä. Á¤¸®ÇÏ¸é ´ÙÀ½°ú °°½À´Ï´Ù.
n ÀÚ¹Ù¿¡¼ ÀûÀçµÇ´Â Byte¸¦ Class Ŭ·¡½º¶ó ĪÇÑ´Ù.
n ClassŬ·¡½º´Â .class ±× ÀÚüÀÌ´Ù.
n ClassŬ·¡½º´Â Ŭ·¡½º³»ÀÇ ¸ðµç Á¤º¸¸¦ ´ã°í ÀÖ´Ù.
n Ŭ·¡½º¸¦ »ç¿ëÇϱâ À§Çؼ´Â ´Ü Çѹø ÇØ´ç Ŭ·¡½ºÀÇ ClassŬ·¡½º¸¦ ·ÎµùÇØ¾ß ÇÑ´Ù.
n ClassŬ·¡½º Áï, .class¸¦ ·ÎµùÇÒ ¶§ classpath¸¦ ÂüÁ¶Çϰųª Á¤È®ÇÑ Å¬·¡½ºÀÇ À§Ä¡¸¦ °¡¸£ÃÄ ÁÖ¾î¾ß ÇÑ´Ù.
n ±×·¸±â ¶§¹®¿¡ import¶ó´Â °ÍÀ» »ç¿ëÇÑ´Ù.
¸ðµç ÇÏÀ§ Ŭ·¡½º´Â »óÀ§ Ŭ·¡½º¸¦ »ó¼Ó ¹Þ±â ¶§¹®¿¡ Object ÀÇ getClass() ´Â ÇÏÀ§ Ŭ·¡½º¿¡¼ »ç¿ëÇÒ ¼ö ÀÖ´Ù. µû¶ó¼ getClass()¸¦ ÀÌ¿ëÇÏ¿© ÇØ´ç Ŭ·¡½ºÀÇ Á¤º¸ Ŭ·¡½ºÀÎ Class Ŭ·¡½º¸¦ ¾òÀ» ¼ö ÀÖ´Ù.
ÀÏ´Ü Object Ŭ·¡½ºÀÇ getClass()¸¦ È£ÃâÇÏ¿´´Ù¸é Class ŸÀÔÀÇ °´Ã¼¸¦ ¾òÀ» ¼ö ÀÖ½À´Ï´Ù.
n String s = new String(¡°¾È³çÇϼ¼¿ä¡±);
n Class c = s.getClass();
¿©±â¼ °´Ã¼ c´Â Class ŸÀÔÀÇ °´Ã¼ÀÔ´Ï´Ù. ¿©±â¼ c´Â String.class¸¦ ¸»ÇÏ´Â °ÍÀÔ´Ï´Ù.
n Class c=s.getClass() à Class c = String.class
ÀÌ¿Í °°Àº Ç¥ÇöÀ» »ç¿ëÇÒ ¼ö ÀÖ½À´Ï´Ù. ¿Ö³ÄÇϸé À§ÀÇ sÀÇ ClassŬ·¡½º´Â String.classÀ̱⶧¹®ÀÔ´Ï´Ù. ¾Ë°íº¸¸é String.java¶ó´Â ÆÄÀÏÀ» sun»ç¿¡ compileÇÏ¿© String.class¶ó´Â ÇüÅ·Π¸¸µé¾î µÎ¾úÀ¸¸ç ¿ì¸®´Â »ç¿ë¸¸ ÇÏ´Â °ÍÀÌÁö¿ä.
Class Ŭ·¡½º´Â °¢°¢ÀÇ Å¬·¡½º¿¡ ´ëÇÑ Á¤º¸¸¦ ¾ò°Ô ÇØÁÖ´Â ¸¹Àº ¸Þ¼µå¸¦ Á¦°øÇÕ´Ï´Ù. ÀÌ ¸Þ¼µåµéÀÌ Á¦°øÇÏ´Â Á¤º¸´Â Å©°Ô 2°¡Áö·Î ³ª´ ¼ö ÀÖ½À´Ï´Ù. Ŭ·¡½ºÀÇ Å¸ÀÔ¿¡ °üÇÑ Á¤º¸¿Í Ŭ·¡½º ¸â¹ö¿¡ °üÇÑ Á¤º¸·Î ³ª´ ¼ö ÀÖ´Ù. Ŭ·¡½º ŸÀÔ¿¡ °üÇÑ Á¤º¸·Î´Â °¡·É. ¡°Å¬·¡½º°¡ ¾î¶² ÀÎÅÍÆäÀ̽º¸¦ ±¸ÇöÇÏ¿´´Â°¡?¡± ȤÀº ¡°¾î¶² Ŭ·¡½º¸¦ »ó¼Ó ¹Þ¾Ò´Â°¡?¡±µî¿¡ °üÇÑ Á¤º¸¸¦ ¸»ÇÕ´Ï´Ù. Ŭ·¡½º ¸â¹ö¿¡ °üÇÑ Á¤º¸·Î´Â ¡°Å¬·¡½º°¡ ÀÎÅÍÆäÀ̽º³ª ¹è¿À» °¡Áö°í Àִ°¡?¡± ¶Ç´Â ¡°Æ¯Á¤ °´Ã¼°¡ ±× Ŭ·¡½ºÀÇ ÀνºÅϽºÀΰ¡?¡±ÀÇ ¿©ºÎµîÀÌ ÇØ´çµË´Ï´Ù.
Class Ŭ·¡½º·Î ÇÒ ¼ö ÀÖ´Â ÀÏÀº Class class °¡ º¸À¯Çϰí ÀÖ´Â ¸Þ¼µåµéÀ» »ìÆìº¸¸é ¾Ë ¼ö ÀÖ½À´Ï´Ù.
n public Method [] getMethod
n public class getComponentType()
n public Field getField()
n public Constructor [] getConstructor()
n public Class getSuperclass()
n public Class [] getInterface()
n public String getName() µîµî¡¦.
ÀÌ ¸Þ¼µåµéÀ» À¯½ÉÈ÷ »ìÆìº¸¸é Ŭ·¡½º°¡ °¡Áö°í ÀÖ´Â ¸ðµç °ÍÀ» ÀüºÎ ¾ò¾î³»°íÀÚ ÇÏ´Â °Í °°´Ù.
°£´ÜÇÑ ¿¹Á¦¸¦ »ìÆìº¸ÀÚ
ShowClassInfoŬ·¡½º(ClassŬ·¡½º¸¦ ÀÌ¿ëÇÏ¿© Ŭ·¡½º¿¡ ´ëÇÑ Á¤º¸ ÃßÃâ) |
import java.lang.reflect.*; import java.util.Vector; public class ShowClassInfo { public void printShow(){ } public static void main(String [] args) { try{ Class c = Class.forName("ShowClassInfo"); System.out.println("====Superclass ¾ò¾î³»±â===="); Class cla = c.getSuperclass(); System.out.println(cla.toString()); System.out.println("==Constructor [] ¾ò¾î³»±â=="); Constructor [] ctor = c.getConstructors(); for(int i=0;i<ctor.length;i++) System.out.println(ctor[i].toString()); System.out.println("====Method [] ¾ò¾î³»±â===="); Method [] m = c.getMethods(); for(int i=0;i<m.length;i++) System.out.println(m[i].toString()); }catch(Exception e){} } } |
C:\JavaExample\10>javac ShowClassInfo.java C:\JavaExample\10>java ShowClassInfo ====Superclass ¾ò¾î³»±â==== class java.lang.Object ==Constructor [] ¾ò¾î³»±â== public ShowClassInfo() ====Method [] ¾ò¾î³»±â==== public static void ShowClassInfo.main(java.lang.String[]) public native int java.lang.Object.hashCode() public final void java.lang.Object.wait() throws java.lang.InterruptedException public final void java.lang.Object.wait(long,int) throws java.lang.InterruptedException public final native void java.lang.Object.wait(long) throws java.lang.InterruptedException public final native java.lang.Class java.lang.Object.getClass() public boolean java.lang.Object.equals(java.lang.Object) public java.lang.String java.lang.Object.toString() public final native void java.lang.Object.notify() public final native void java.lang.Object.notifyAll() public void ShowClassInfo.printShow() |
À§ÀÇ ¿¹Á¦¿¡ ¾²ÀÎ ¸Þ¼µåµéÀº forName(), getSuperclass(), getConstructors(), getMethods() ¸Þ¼µå°¡ ÀÖ½À´Ï´Ù. À§¿¡ ¾²ÀÎ ¸Þ¼µåµéÀ» Áß½ÉÀ¸·Î Class Ŭ·¡½ºÀÇ ¸Þ¼µåµéÀ» °£´ÜÈ÷ »ìÆìº¸±â·Î ÇÏÁÒ.
¸ÕÀú ShowClassInfo Ŭ·¡½º¸¦ ·Îµå½Ã۱â À§Çؼ Class.forName() ¸Þ¼µå¸¦ »ç¿ëÇÏ¿© ÀÌ Å¬·¡½ºÀÇ À§Ä¡¸¦ Ŭ·¡½º ·Î´õ¿¡ ¾Ë·ÁÁÖ°Ô µË´Ï´Ù. ´ÙÀ½À¸·Î getSuperclass() ¸Þ¼µå¸¦ ÀÌ¿ëÇØ¼ ShowClassInfo Ŭ·¡½ºÀÇ »óÀ§ Ŭ·¡½º°¡ ¾î¶² Ŭ·¡½ºÀÎÁö¸¦ ¾Ë¾Æ³»°í, getConstructors() ¸Þ¼µå·Î´Â ShowClassInfo Ŭ·¡½ºÀÇ »ý¼ºÀÚ(constructor) ¸Þ¼µå¸¦ ¾Ë ¼ö ÀÖ½À´Ï´Ù. ¸¶Áö¸·À¸·Î getMethods() ¸Þ¼µå¸¦ »ç¿ëÇØ¼ ÀÌ Å¬·¡½º¿¡ ¾²ÀÎ ¸Þ¼µåµéÀ» ¾Ë¾Æ ³¾ ¼ö ÀÖ½À´Ï´Ù.
½ÇÇà °á°ú¸¦ º¸¸é, ÀÌ Å¬·¡½º´Â ¾î¶² ƯÁ¤ Ŭ·¡½º¸¦ »ó¼Ó ¹ÞÁö ¾Ê¾Æ¼ ¸ðµç Ŭ·¡½º¿¡ »ó¼ÓµÇ´Â Object Ŭ·¡½º°¡ ÀÌ Å¬·¡½ºÀÇ »óÀ§ Ŭ·¡½º·Î Ãâ·ÂµÇ¾ú½À´Ï´Ù. ¸Þ¼µå¸¦ ¾ò¾î³¾ ¶§ ÁÖÀÇÇÒ Á¡Àº, ÇÑ Å¬·¡½º¿¡´Â ¿©·¯ °³ÀÇ ¸Þ¼µåµéÀÌ Á¸ÀçÇÒ ¼öµµ Àֱ⿡ ¹ÝȯÇüÀ» ¹è¿·Î ó¸®ÇÏ´Â °ÍÀÔ´Ï´Ù. ÀÌ Å¬·¡½º¿¡´Â ƯÁ¤ÇÑ »ý¼ºÀÚ ¸Þ¼µåµéÀÌ ¾²ÀÌÁö ¾Ê°í Àֱ⠶§¹®¿¡ ±âº» »ý¼ºÀÚ ¸Þ¼µåÀÎ ShowClassInfo()°¡ Ãâ·ÂµÇ¾ú½À´Ï´Ù. ±×·±µ¥ getMethods() ¸Þ¼µå¸¦ »ç¿ëÇØ¼ ¸Þ¼µåµéÀ» Ãâ·Â½ÃŰ´Â ºÎºÐ¿¡ Á¶±Ý ÀÌ»óÇÑ Á¡ÀÌ ¹ß°ßµË´Ï´Ù. ÀÌ Å¬·¡½º¿¡´Â ºÐ¸í printShow()¿Í main() ¸Þ¼µå¸¸ÀÌ ¾²¿´´Âµ¥ ÀÌ»óÇÑ ´Ù¸¥ ¿©·¯ °¡Áö ¸Þ¼µåµéÀÌ Ãâ·Â µÇ¾ú½À´Ï´Ù. Á¶±Ý °ü½É ÀÖ°Ô »ìÆìº» »ç¶÷Àº ±Ý¹æ ¾Ë ¼ö ÀÖÀ» °ÍÀÔ´Ï´Ù. À̰ÍÀº ¹Ù·Î Object Ŭ·¡½ºÀÇ ¸â¹ö ¸Þ¼µå¶ó´Â °ÍÀ» ¸»ÀÔ´Ï´Ù.
À§¿¡¼ ¾Ë ¼ö ÀÖ´Â °ÍÀº Class Ŭ·¡½º°¡ º¸À¯Çϰí ÀÖ´Â °ÍÀº °´Ã¼ ÀÚüÀÇ ´ëÇÑ °ÍÀÌ ¾Æ´Ï¶ó, ƯÁ¤ °´Ã¼ÀÇ Å¸ÀÔ¿¡ °üÇÑ Á¤º¸ ÃßÃâÀ̶ó´Â °ÍÀÌ´Ù. ÀÌ ¸»ÀÌ Á¶±Ý ¾î·Á¿î ºÎºÐÀÌ ÀÖ°ÚÁö¸¸ °ÆÁ¤ÇÒ ÇÊ¿ä´Â ¾ø½À´Ï´Ù. ¿Ö³ÄÇϸé reflection ºÎºÐ¿¡¼ Class Ŭ·¡½º¿¡ ´ëÇØ ¾ÆÁÖ ÀÚ¼¼ÇÏ°íµµ ¾Ë±â ½±°Ô ¼³¸íÇÒ °ÍÀ̱⠶§¹®ÀÔ´Ï´Ù.
ÀϹÝÀûÀ¸·Î Class Ŭ·¡½º¸¦ ¸»ÇÒ ¶§ ½ÇÇà½Ã¿¡ Çü È®ÀÎÀ̶õ ¿ë¾î¸¦ ¸¹ÀÌ »ç¿ëÇÑ´Ù. ½ÇÇà½Ã¿¡ °´Ã¼´Â °¡»ó ¸Ó½Å¿¡ ·ÎµùµÉ ¼ö ÀÖ´Â Byte¿Í °´Ã¼ ÀÚüÀÇ ¸Þ¸ð¸®¸¸À» º¸À¯Çϰí ÀÖ´Ù. ¸¸¾à ¿ì¸®°¡ casting À» ½ÃŲ´Ù¸é °¡»ó ¸Ó½ÅÀº ¾î¶»°Ô °´Ã¼ÀÇ ÇüÀ» ºñ±³ÇÒ °ÍÀΰ¡? ÀÌ ¶§ ½ÇÇà ½Ã °´Ã¼ ºñ±³´Â Ŭ·¡½ºÀÇ ´É·ÂÀ» ºÐ¼®ÇØÁÖ´Â Class Ŭ·¡½º¸¦ ÀÌ¿ëÇÏ¿© ºÐ¼®ÇÏ°Ô µÈ´Ù. Ŭ·¡½ºÀÇ ´É·ÂÀ» run-time ½Ã¿¡ ºÐ¼®Çϰí, °Ë»çÇÏ´Â ±â´ÉÀ» ¼öÇàÇϵµ·Ï µ½´Â Ŭ·¡½º°¡ ¹Ù·Î Class Ŭ·¡½ºÀÌ´Ù.
ClassŬ·¡½º¸¦ ÀÌ¿ëÇÏ¿© °´Ã¼ÀÇ ´É·ÂÀ» ºÐ¼®ÇÏ´Â ±â¹ýÀº reflectionÀ̶ó°í Çϸç, ´ÙÀ½Àå¿¡¼ º¸´Ù ÀÚ¼¼È÷ ³íÇÏ°Ô µÉ °ÍÀÔ´Ï´Ù. ¿ì¸®°¡ ÇÁ·Î±×·¥»ó¿¡¼ reflectionÀ» Á÷Á¢ »ç¿ëÇÏ´Â °æ¿ì´Â ÈçÇÏÁö ¾Ê½À´Ï´Ù. °ÅÀÇ ´ëºÎºÐÀÇ ÇÁ·Î±×·¥¿¡¼ ³»ºÎÀûÀ¸·Î reflectionÀÌ ÀÌ·ç¾î Áö¸ç, Á÷Á¢ »ç¿ëÇÏ´Â °æ¿ì´Â µ¥ÀÌÅÍ º£À̽º¿¡¼ Driver¸¦ ·ÎµùÇÏ´Â
n Class c = Class.forName(¡°sun.jdbc.odbc.JdbcOdbcDriver¡±);
ÀÌ ºÎºÐ¿¡¼ ÁÖ·Î »ç¿ëÇÏ°Ô µË´Ï´Ù. ÀÌ ±¸¹®Àº ´Ü¼øÈ÷ JdbcOdbcDriver.class¸¦ °¡»ó¸Ó½Å¿¡ ÀûÀçÇϰڴٴ ÀǹÌÀÔ´Ï´Ù. º¸Åë ClassŬ·¡½ºÀÇ °³³äÀ» ¸ð¸¥´Ù¸é ÀÌ ±¸¹®À» ÇØ¼®ÇÒ ¼ö ¾ø°ÚÁÒ.
ReflectionÀº ÀÚ¹Ù¿¡¼ ¾ÆÁÖ Áß¿äÇÑ °³³äÀ̱⠶§¹®¿¡ reflection ¾ø´Â Enterprise Java Beans¸¦ »ý°¢ ÇÒ ¼ö ¾ø°í, RMI(Remote Method Invocation) ¶ÇÇÑ »ý°¢ ÇÒ ¼ö ¾ø½À´Ï´Ù. ±×¸®°í °í±Þ ÀÚ¹Ù·Î °¡¸é °¥¼ö·Ï ³»ºÎÀûÀ¸·Î ´õ ¸¹ÀÌ »ç¿ëÇÏ°Ô µË´Ï´Ù. ClassŬ·¡½º´Â ReflectionÀ» ´Ù·ç±â À§ÇÑ ±âÃÊÁ¤µµ µË´Ï´Ù.
´ÙÀ½ Àå¿¡¼´Â ÇüÀ» ¸ð¸¥´Ù´Â °¡Á¤ ÇÏ¿¡ °´Ã¼¸¦ ÇÚµéÇÏ´Â º¸´Ù °íÂ÷¿øÀÇ ÇÁ·Î±×·¥±â¹ýÀ» ³íÇÏ°Ô µÉ °ÍÀÌ´Ù.
jabookÀúÀÚ¸íÇÔ |
Á¦¸ñ:¼Ò¼³°°ÀºÀÚ¹Ù2ºÎ ÀúÀÚ:ÃÖ¿µ°ü |