¼Ò¼³°°ÀºÀÚ¹Ù2ºÎ  Á¦10Àå ObjectŬ·¡½º  10.7 getClass¸Þ¼­µå  

 

10.7 getClass()

 

10.7.1 getClass()¿Í Á¤º¸Å¬·¡½º

 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´Â Ŭ·¡½ºÀÇ ¸ðµç Á¤º¸¸¦ ÀüºÎ Æ÷ÇÔÇϰí ÀÖ½À´Ï´Ù.

 

10.7.2 Ŭ·¡½ºÀÇ ·Îµù

ÄÄÆÄÀÏ ÈÄÀÇ .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 Ŭ·¡½º¸¦ ¾òÀ» ¼ö ÀÖ´Ù.

 

 

10.7.3 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 Ŭ·¡½º¿¡ ´ëÇØ ¾ÆÁÖ ÀÚ¼¼ÇÏ°íµµ ¾Ë±â ½±°Ô ¼³¸íÇÒ °ÍÀ̱⠶§¹®ÀÔ´Ï´Ù.

 

10.7.4 Class Ŭ·¡½º´Â ¾îµð¿¡ »ç¿ëÇϴ°¡?

ÀϹÝÀûÀ¸·Î Class Ŭ·¡½º¸¦ ¸»ÇÒ ¶§ ½ÇÇà½Ã¿¡ Çü È®ÀÎÀ̶õ ¿ë¾î¸¦ ¸¹ÀÌ »ç¿ëÇÑ´Ù. ½ÇÇà½Ã¿¡ °´Ã¼´Â °¡»ó ¸Ó½Å¿¡ ·ÎµùµÉ ¼ö ÀÖ´Â Byte¿Í °´Ã¼ ÀÚüÀÇ ¸Þ¸ð¸®¸¸À» º¸À¯Çϰí ÀÖ´Ù. ¸¸¾à ¿ì¸®°¡ casting À» ½ÃŲ´Ù¸é °¡»ó ¸Ó½ÅÀº ¾î¶»°Ô °´Ã¼ÀÇ ÇüÀ» ºñ±³ÇÒ °ÍÀΰ¡? ÀÌ ¶§ ½ÇÇà ½Ã °´Ã¼ ºñ±³´Â Ŭ·¡½ºÀÇ ´É·ÂÀ» ºÐ¼®ÇØÁÖ´Â Class Ŭ·¡½º¸¦ ÀÌ¿ëÇÏ¿© ºÐ¼®ÇÏ°Ô µÈ´Ù. Ŭ·¡½ºÀÇ ´É·ÂÀ» run-time ½Ã¿¡ ºÐ¼®Çϰí, °Ë»çÇÏ´Â ±â´ÉÀ» ¼öÇàÇϵµ·Ï µ½´Â Ŭ·¡½º°¡ ¹Ù·Î Class Ŭ·¡½ºÀÌ´Ù.

 

10.7.5. ¿ä¾à

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ºÎ
ÀúÀÚ:ÃÖ¿µ°ü