¼Ò¼³°°ÀºÀÚ¹Ù1ºÎ  4Àå. Class for Java  Inheritance  

4.4 Inheritance

4.4.1 »ó¼ÓÀ̶õ?

 »ó¼ÓÀ̶õ ±âÁ¸ÀÇ ¸¸µé¾î µÐ Ŭ·¡½º¸¦ ´Ù½Ã ÀÌ¿ëÇÒ ¹æ¹ýÀ» Á¦°øÇϰí ÀÖ½À´Ï´Ù. »ó¼ÓÀº ±âÁ¸ ±¸Á¶Ã¼¿¡¼­´Â ¾ø´ø °³³äÀ¸·Î Ŭ·¡½º¿¡¼­¸¸ Åë¿ëµÇ´Â °³³äÀÔ´Ï´Ù. C¿Í °¡Àå Àß ±¸º° µÇ´Â ºÎºÐÀ̱⵵ ÇÏÁö¸¸ »ó¼ÓÀÇ °³³äÀº °´Ã¼ÁöÇâÀÇ ¸¹Àº ºÎºÐ¿¡¼­ »ó´çÈ÷ ³­ÇØÇÑ °³³äµéÀ» ³»Æ÷Çϰí ÀÖ½À´Ï´Ù.

 

ÀÚ¹Ù¿¡¼­´Â ¸¸µé¾îÁø Ŭ·¡½º¸¦ ÀÌ¿ëÇÏ¿© »õ·Î¿î Ŭ·¡½º·Î È®ÀåÇÒ ¶§ extends¶ó´Â Ű¿öµå¸¦ »ç¿ëÇÕ´Ï´Ù. »ç½Ç ÀÚ¹Ù¿¡¼­ extends°¡ ÀüºÎ¶ó ÇØµµ °ú¾ðÀÌ ¾Æ´Ò °ÍÀÔ´Ï´Ù. ÀÚ¹Ù¿¡¼­ »ó¼ÓÀ» »©¸é ³²´Â °ÍÀÌ ¾øÁÒ.  ÀÚ¹ÙÀÇ ´Ù¾çÇÑ ¶óÀ̺귯¸®¸¦ »ó¼Ó ¹ÞÀ» ¼ö ÀÖ´Ù´Â ÀåÁ¡¶§¹®¿¡ ¿ì¸®´Â ÀÚ¹Ù¸¦ ¼±È£ÇÏ´ÂÁöµµ ¸ð¸¨´Ï´Ù. ±×·¸´Ù¸é »ó¼ÓÀº ¹«¾ùÀϱî¿ä? ÇÏÀ§Å¬·¡½º°¡ »óÀ§ Ŭ·¡½º¸¦ »ó¼Ó ¹Þ¾ÒÀ» ¶§ ÀÏ´Ü ÇÏÀ§Å¬·¡½º´Â »óÀ§Å¬·¡½ºÀÇ ¸ðµç ±ÇÇÑÀ» °®°Ô µË´Ï´Ù.

 

Áï, »óÀ§Å¬·¡½º¿¡¼­ ¸¹Àº ÇÁ·Î±×·¥À» ÇØ µÎ¾ú°í ¸¹Àº ´É·ÂÀ» °¡Áö°í ÀÖ´Ù¸é À̰ÍÀ» ¸ðµÎ ÀÌ¿ëÇÒ ¼ö ÀÖ´Ù´Â ÀåÁ¡ÀÌ ÀÖ½À´Ï´Ù. °´Ã¼ÁöÇâ±â¹ý¿¡¼­ Ŭ·¡½º³»¿¡ ¸Þ¼­µåÀÇ »ðÀÔº¸´Ùµµ ´õ ¾öû³­ ±â´ÉÀÌ ¹Ù·Î »ó¼ÓÀÇ °³³äÀÔ´Ï´Ù.  ÀÌ¹Ì ¸¸µé¾îÁø Ŭ·¡½º¸¦ ÀÌ¿ëÇÏ¿© »õ·Î¿î Ŭ·¡½º¸¦ »ý¼ºÇÑ´Ù´Â ¸» º¸´Ù´Â ¸¸µé¾îÁ® Àִ Ŭ·¡½º¿¡¼­ »ó¼ÓÀ» ¹Þ´Â ¼ø°£ ÇöÀçÀÇ Å¬·¡½º°¡ °ð »óÀ§Å¬·¡½º¿¡¼­ Ãâ¹ßÇÑ´Ù°í »ý°¢ÇÏ´Â °ÍÀÌ ´õ ÀÌÇØ°¡ ½±°Ú±º¿ä. ¿¹¸¦ µé¸é java.awt.FrameÀ» »ó¼Ó¹Þ¾Æ »õ·Î¿î Ŭ·¡½ºÀÎ HelloFrameŬ·¡½º¸¦ ¸¸µé¾ú´Ù¸é ¾Æ·¡¿Í °°ÀÌ ¸¸µé¾î Áý´Ï´Ù.

 

public class HelloFrame extends Frame{

    // Ŭ·¡½º ³»¿¡ ÀÛ¾÷

}

 

HelloFrameÀº ³»ºÎ¿¡ ¾Æ¹«°Íµµ ¾ø´Â °Íó·³ º¸ÀÌÁö¸¸ ±âÁ¸ÀÇ FrameÀÇ ¸ðµç ±â´É°ú Ư¼ºÀ» °¡Áö°í Àֱ⠶§¹®¿¡ ³»ºÎ°¡ ºñ¾î ÀÖ´Ù°í º¸´Â °ÍÀº Å« ¿À»êÀÔ´Ï´Ù. HelloFrameÀÚü´Â ¼ö¸¹Àº ¸â¹öµéÀ» °¡Áö°í ÀÖ½À´Ï´Ù. ¿©·¯ºÐÀÌ ÇÁ·Î±×·¥À» Çϸ鼭 µµÀúÈ÷ ±¸ÇöÇÒ ¼öµµ ¾øÀ» Á¤µµÀÇ ¾öû³­ ºÐ·®ÀÇ ¸Þ¼­µå°¡ µé¾î ÀÖ½À´Ï´Ù. À̰ÍÀÌ »ó¼ÓÀÇ ÀåÁ¡ÀÌÁÒ. ÀÌ·¯ÇÑ ÀåÁ¡µéÀ» ÀÌ¿ëÇÏ´Â ¹æ¹ýµµ ±×·¸°Ô ½¬¿î °ÍÀº ¾Æ´Õ´Ï´Ù. ¸î °¡Áö ±ÔÄ¢Àº °£´ÜÇÏÁö¸¸ ±×°ÍÀ» Á¦´ë·Î ÀÌ¿ëÇϱâ À§Çؼ­´Â ¸¹Àº °³³äµéÀ» ¹è¿ö¾ß¸¸ °¡´ÉÇÕ´Ï´Ù. »ó¼Ó¿¡¼­ ³ªÅ¸³ª´Â ¿©·¯ °¡Áö °³³äµé¿¡ ´ëÇØ¼­ ¹è¿ö º¸µµ·Ï ÇϰڽÀ´Ï´Ù.

 

 

4.4.2 »ó¼ÓÀÇ ±âº» ¿¹

 »ó¼Ó¿¡ °ü·ÃµÈ Ŭ·¡½º¸¦ Á÷Á¢ ¸¸µé¾î º¸°Ú½À´Ï´Ù. ÀÏ´Ü ÇҾƹöÁö Ŭ·¡½º¸¦ ¸¸µéÁÒ. ÇҾƹöÁö Ŭ·¡½º¸¦ »ó¼Ó ¹Þ¾Æ ¾Æ¹öÁö Ŭ·¡½º¸¦ ¸¸µé°í ¾Æ¹öÁöŬ·¡½º¸¦ ÀÌ¿ëÇÏ¿© °´Ã¼¸¦ ¸¸µé°í ¾Æ¹öÁö °´Ã¼¿¡¼­ ÇҾƹöÁö ¼Ò¼ÓÀÇ ¸Þ¼­µåµé È£ÃâÇØ º¸ÁÒ. ÀÌ·¸°Ô µÈ´Ù¸é ¾Æ¹öÁö°¡ ÇҾƹöÁö °ÍÀ» ÀÌ¿ëÇÏ´Â °ÍÀÌ µÇ°ÚÁÒ. Áö±Ý ¼³¸íÇÑ ¿¹Á¦´Â ¾Æ·¡¿Í °°½À´Ï´Ù.

 

GrandFather.java

public class GrandFather{

             public GrandFather(){

                           System.out.println(" I am GrandFather ");

             }

             public void sayGrandNumber(){

                           for(int i =0; i<10; i++){

                                        System.out.print( i + "\t");

                           }

             }

}

 

Father.java

public class Father extends GrandFather {

             public Father(){

                           System.out.println(" I am Father ");

             }

             public void sayFatherNumber(){

                           for(int i =0; i<20; i++){

                                        System.out.print( i + "\t");

                           }

             }

}

 

InheritanceTest.java

public class InheritanceTest {

    public static void main(String[] args) {

       Father f = new Father();

                System.out.println("GrandFatherÀÇ sayGrandNumber");

                f.sayGrandNumber(); // ÇҾƹöÁöÀÇ ¸Þ¼­µå È£Ãâ

 

                System.out.println("FatherÀÇ sayFatherNumber");

                f.sayFatherNumber(); // ¾Æ¹öÁö ÀÚ½ÅÀÇ ¸Þ¼­µå È£Ãâ

    }

}

C:\examples\4. Class for Basic Java>javac GrandFather.java

C:\examples\4. Class for Basic Java>javac Father.java

C:\examples\4. Class for Basic Java>javac InheritanceTest.java

 

C:\examples\4. Class for Basic Java>java InheritanceTest

 I am GrandFather

 I am Father

GrandFatherÀÇ sayGrandNumber

0       1       2       3       4       5       6       7       8       9

FatherÀÇ sayFatherNumber

0       1       2       3       4       5       6       7       8       9

10      11      12      13      14      15      16      17      18      19

 

À§ÀÇ ¿¹Á¦¿¡¼­ FatherŬ·¡½º´Â GrandFatherŬ·¡½º¸¦ »ó¼ÓÇϰí ÀÖ½À´Ï´Ù. GrandFather¸¦ »ó¼Ó ¹Þ´Â ¼ø°£ FatherŬ·¡½º´Â GrandFatherŬ·¡½ºÀÇ ¸ðµç °ÍÀ» °¡Áö°í ½ÃÀÛÇÑ´Ù°í º¸¸é ¿ÇÀ» °ÍÀÔ´Ï´Ù. FatherŬ·¡½º¸¦ Å×½ºÆ®Çϱâ À§Çؼ­ InheritanceTestŬ·¡½ºÀÇ main¸Þ¼­µå¿¡¼­ Father °´Ã¼ f¸¦ »ý¼ºÇϰí Father°´Ã¼´Â GrandFatherŬ·¡½ºÀÇ °ÍÀ» ÀÚ½ÅÀÇ °Íó·³ È£Ãâ Çϰí ÀÖ½À´Ï´Ù. À̰ÍÀÌ ¹Ù·Î »ó¼ÓÀÇ ÀåÁ¡ÀÔ´Ï´Ù. »ý¼ºÀÚ¸Þ¼­µå¸¦ Á¦¿ÜÇÑ´Ù¸é FatherŬ·¡½º´Â ¾Æ¹öÁöÀÇ Å¬·¡½ºÀÇ ¸Þ¼­µå¿Í ÀÚ½ÅÀÇ ¸Þ¼­µå 2°³¸¦ °¡Áö°Ô µË´Ï´Ù. ´ÙÀ½Àº À§ÀÇ ÇÁ·Î±×·¥ÀÇ ±¸Á¶¸¦ º¸¿© ÁÖ°í ÀÖ½À´Ï´Ù.

¿©±â¼­ Àá±ñ Á» °Å½½¸®´Â°Ô ÀÖÁÒ. ¹Ù·Î »ý¼ºÀÚ¸Þ¼­µåÀÔ´Ï´Ù. »ó¼ÓÀº »óÀ§ Ŭ·¡½ºÀÇ ¸ðµç °ÍÀ» ´Ù ¹Þ´Â´Ù¸é »ý¼ºÀÚ¸Þ¼­µåµµ »ó¼Ó ¹ÞÀ»±î¿ä? ¿©±â¼­´Â ´äÀº NoÀÔ´Ï´Ù. »ý¼ºÀÚ¸Þ¼­µå´Â »ó¼Ó ÇÏÁö ¾Ê½À´Ï´Ù.

 

¾Æ¹öÁö°¡ ÇҾƹöÁö¸¦ »ó¼Ó ¹Þ¾Ò±â ¶§¹®¿¡ ÇҾƹöÁöÀÇ ¸Þ¼­µå¸¦ ¾Æ¹öÁö°¡ »ç¿ëÇÒ ¼ö ÀÖ½À´Ï´Ù. ÇÏÁö¸¸ °á°ú¿¡¼­ ÀÌ»óÇÑ ºÎºÐÀ» ¹ß°ßÇÒ ¼ö ÀÖ½À´Ï´Ù. ¹Ù·Î »ý¼ºÀÚ¸Þ¼­µåÀÇ È£ÃâÀÔ´Ï´Ù. ¾Æ¹öÁö °´Ã¼¸¦ ¸¸µå´Âµ¥ ÇҾƹöÁöÀÇ »ý¼ºÀÚ¸Þ¼­µåµµ È£Ã⠵ǰí ÀÖ½À´Ï´Ù. ÀÌ»óÇÑ ÀÏÀÌÁÒ. À̰ÍÀº ÀÌ·¸°Ô ¼³¸íÇÒ ¼ö ÀÖ½À´Ï´Ù. »ó¼Ó°úÁ¤¿¡¼­ »óÀ§ ·¹º§ÀÇ Å¬·¡½ºÀÇ ¸Þ¸ð¸®°¡ »ý¼ºµÇÁö ¾Ê´Â´Ù¸é ÀÚ½Ä ·¹º§ÀÇ ¸Þ¸ð¸®´Â »ý¼ºÇÒ ¼ö ¾ø´Ù. ±×·¸±â ¶§¹®¿¡ FatherŬ·¡½º·Î °´Ã¼¸¦ ¸¸µé¾ú´Ù¸é FatherÀÌ »ó¼Ó ¹ÞÀº ¸ðµç »óÀ§ ·¹º§ÀÇ »ý¼ºÀÚ¸Þ¼­µå°¡ Â÷·Ê´ë·Î È£Ã⠵ǾîÁö°í Á¦ÀÏ ¸¶Áö¸·¿¡ ÀÚ½ÅÀÇ °ÍÀÌ È£Ã⠵ǾîÁý´Ï´Ù. ÇҾƹöÁö°¡ ¾ø´Ù¸é ¾Æ¹öÁöµµ ¾ø°ÚÁÒ. ±×·¡¼­ ÇҾƹöÁö »ý¼ºÀÚ°¡ È£Ãâ µÈ ÈÄ. ¾Æ¹öÁöÀÇ »ý¼ºÀÚ°¡ È£Ã⠵˴ϴÙ.

 

¿©±â¼­ ÇҾƹöÁö, ¾Æ¹öÁö, ¾Æµé±îÁö 3´Ü°è·Î ³ª´©¾î¼­ »ó¼ÓÇØµµ ÀÌ ±ÔÄ¢À» ¾î±âÁö´Â ¾Ê½À´Ï´Ù. ¾Æ·¡´Â 3´Ü°èÀÇ ±¸Á¶¿Í ÇÁ·Î±×·¥ÀÇ ¿¹ÀÔ´Ï´Ù.

Child.java(3´Ü°è»ó¼ÓÀ» À§ÇÑ ¾Æµé Ŭ·¡½º)

public class Child extends Father {

             public Child(){

                           System.out.println(" I am Child");

             }

             public void sayChildNumber(){

                           for(int i =0; i<30; i++){

                                        System.out.print( i + "\t");

                           }

             }

}

 

InheritanceTest2.java(3´Ü°è »ó¼ÓÀ» À§ÇÑ ¿¹Á¦)

public class InheritanceTest2 {

    public static void main(String[] args) {

             Child c = new Child();

                System.out.println("GrandFatherÀÇ sayGrandNumber");

                c.sayGrandNumber();

                System.out.println("FatherÀÇ sayFatherNumber");

                c.sayFatherNumber();

                System.out.println("Child sayChildNumber");

                c.sayChildNumber();

    }

}

 

C:\examples\4. Class for Basic Java>javac Child.java

C:\examples\4. Class for Basic Java>javac InheritanceTest2.java

C:\examples\4. Class for Basic Java>java InheritanceTest2

 I am GrandFather

 I am Father

 I am Child

GrandFatherÀÇ sayGrandNumber

0       1       2       3       4       5       6       7       8       9

FatherÀÇ sayFatherNumber

0       1       2       3       4       5       6       7       8       9

10      11      12      13      14      15      16      17      18      19

Child sayChildNumber

0       1       2       3       4       5       6       7       8       9

10      11      12      13      14      15      16      17      18      19

20      21      22      23      24      25      26      27      28      29

 

»ó¼Ó´Ü°è°¡ ´Ã¾î³ª´õ¶óµµ ±âº»ÀûÀÎ ¹ýÄ¢Àº ¶È°°½À´Ï´Ù. ¸Þ¸ð¸®´Â ÃÖ»óÀ§ Ŭ·¡½ººÎÅÍ Â÷·Ê´ë·Î »ý¼ºµÇ¾îÁö¸ç ChildŬ·¡½º´Â ÃÖÇÏÀ§ Ŭ·¡½ºÀε¥µµ ±× »óÀ§ÀÇ Å¬·¡½º¿¡ ¼ÓÇØÀÖ´Â ¸Þ¼­µå¸¦ ¸ðµÎ »ç¿ëÇÒ ¼ö ÀÖ½À´Ï´Ù.

 

 

4.4.3 »ý¼ºÀÚ È£Ãâ ¼ø¼­

¾î¶² Ŭ·¡½º°¡ »óÀ§Å¬·¡½º·ÎºÎÅÍ »ó¼ÓÀ» ¹Þ¾Ò´Ù¸é ´ç¿¬È÷ »óÀ§ Ŭ·¡½ºÀÇ ¸Þ¸ð¸®¸¦ °¡Áö°í ÀÖ¾î¾ß ÇÕ´Ï´Ù. »óÀ§Å¬·¡½ºÀÇ ¸Þ¸ð¸®¸¦ °¡Áö°í Àֱ⠶§¹®¿¡ ¿ì¸®´Â »óÀ§Å¬·¡½º¸¦ »ó¼Ó ¹Þ¾Ò´Ù°í ÇÕ´Ï´Ù. ÀÌ Áõ°Å´Â ÇÏÀ§ Ŭ·¡½º¸¦ »ý¼ºÇßÀ» °æ¿ì »óÀ§Å¬·¡½ºÀÇ »ý¼ºÀÚ¸Þ¼­µåºÎÅÍ Â÷·Ê´ë·Î È£ÃâÇÏ´Â °ÍÀ» º¼ ¶§ Á¤È®ÇÏ°Ô ¾Ë ¼ö ÀÖ½À´Ï´Ù. Áï »óÀ§ Ŭ·¡½ºÀÇ ¸Þ¸ð¸®¸¦ ÇÏÀ§ Ŭ·¡½º°¡ Æ÷ÇÔÇÏ´Â ¹æ¹ýÀº ÇÏÀ§Å¬·¡½º¸¦ »ý¼ºÇÏ¿´À» ¶§ »óÀ§Å¬·¡½ºÀÇ ¸Þ¸ð¸®¸¦ ÀÚ½ÅÀÌ °®±â À§Çؼ­ ÀÚüÀûÀ¸·Î »óÀ§Å¬·¡½ºÀÇ ¸Þ¸ð¸®¸¦ »ý¼º½Ã۱â´Â ¹æ¹ýÀ» ÀÌ¿ëÇÏ´Â °ÍÀÔ´Ï´Ù. ÀÌ·¯ÇÑ ¹æ¹ýÀ¸·Î ÇÏÀ§ Ŭ·¡½º´Â »óÀ§Å¬·¡½ºÀÇ ¸ðµç ¸Þ¸ð¸®¸¦ Â÷·Ê´ë·Î È®º¸ÇÒ ¼ö ÀÖ½À´Ï´Ù. À§ÀÇ ¿¹¿¡¼­ »ý¼ºÀÚÀÇ È£Ãâ ¼ø¼­¸¦ ³ªÅ¸³»¸é ¾Æ·¡ÀÇ ±×·¥°ú °°½À´Ï´Ù.

 

4.4.4 Áߺ¹»ó¼Ó

  ÀÚ¹Ù¿¡¼­ Áߺ¹»ó¼ÓÀº Çã¿ëÇÏÁö ¾Ê½À´Ï´Ù. 2°³ÀÇ Å¬·¡½º·ÎºÎÅÍ µ¿½Ã¿¡ »ó¼ÓÇÒ ¼ö ¾ø´Ù´Â ¶æÀÔ´Ï´Ù. Ç¥ÁØ C++¿¡¼­´Â Áߺ¹»ó¼ÓÀ» Çã¿ëÇÏÁö¸¸ µ¿½Ã¿¡ ¿©·¯ °³¸¦ »ó¼ÓÇÒ ¶§ÀÇ ¹®Á¦Á¡¶§¹®¿¡ ÀÚ¹Ù¿¡¼­´Â À̰ÍÀ» ¹èÁ¦½ÃÄ×´Ù°í ÇÕ´Ï´Ù. ÀÚ¹Ù¿¡¼­´Â Áߺ¹»ó¼ÓÀ» Çã¿ëÇϰí ÀÖÁö´Â ¾ÊÁö¸¸ Æí¹ýÀ¸·Î À̸¦ »ç¿ëÇϰí ÀÖ´Ù. ±âÁ¸ÀÇ Áߺ¹»ó¼ÓÀÇ ¹®Á¦Á¡À» ¾ø¾Ö°í ±×¸®°í ȹÀÏÀûÀ¸·Î »ç¿ëÇÏ´Â ¹æ¹ýÀ» »ç¿ëÇϰí ÀÖ½À´Ï´Ù. À̰ÍÀÌ ¹Ù·Î interface¶ó°íÇϴµ¥ interface´Â 5Àå¿¡¼­ ´Ù·çµµ·Ï ÇϰڽÀ´Ï´Ù.

 

 

4.4.5 private°ú publicÀÇ »ó¼Ó°ü°è

 private°ú publicÀº »ó¼Ó°ü°è¸¦ ³íÇÒ ¶§ ¿ì¸®´Â ½ÇÇà ŸÀÓ¿¡ ÇÑÇÏ¿© Á¢±ÙÁ¦¾î¸¦ ¼³¸íÇÏ¿´½À´Ï´Ù. Á¢±ÙÁ¦¾î´Â ½ÇÇàŸÀÓ°ú µðÀÚÀΟÀÓ µÎ ºÐ·ù·Î ³ª´µ¸ç Á¢±ÙÁ¦¾î ºÎºÐ¿¡¼­´Â °´Ã¼ÀÇ ¸Þ¸ð¸®¸¦ »ý¼ºÇÑ ÈÄÀÇ Á¢±ÙÁ¦¾îÀÎ ½ÇÇàŸÀÓ Á¢±ÙÁ¦¾î¸¸ ¹è¿ü½À´Ï´Ù. Áö±ÝÀÌ ¹Ù·Î Ŭ·¡½º¸¦ µðÀÚÀÎÇϴ ŸÀÓÀÇ Á¢±ÙÁ¦¾î¸¦ ³íÇÒ ¶§ÀÎ °Í °°½À´Ï´Ù.

 

 Áï, »ó¼Ó°ü°è¿¡¼­ µðÀÚÀΟÀÓÀÇ Á¢±ÙÁ¦¾î°¡ ÀÌ¿ëµÈ´Ù´Â °ÍÀÔ´Ï´Ù. ÀÚ ±×·¸´Ù¸é Á¤È®ÇÏ°Ô »ó¼Ó¿¡¼­ÀÇ Á¢±ÙÁ¦¾î ¹®Á¦´Â ¾î¶² °ÍÀÎÁö ¾Ë¾Æº¸µµ·Ï ÇϰڽÀ´Ï´Ù. ¸ÕÀú ÀÌ·± Áú¹®ºÎÅÍ ´øÁ® º¸ÁÒ. (½¬¿î ¼³¸íÀ» À§ÇÏ¿© »óÀ§Å¬·¡½º¸¦ ¾Æ¹öÁö¶ó ºÎ¸£°í ÇÏÀ§Å¬·¡½º¸¦ ¾ÆµéÀ̶ó ºÎ¸£°Ú½À´Ï´Ù. ¾ÆµéÀº ´ç¿¬È÷ ¾Æ¹öÁö¸¦ »ó¼ÓÇϰí ÀÖ´Â »óÅÂÀÔ´Ï´Ù.)

 

n        »ó¼ÓÀ» ÇÑ´Ù¸é ¾Æ¹öÁöÀÇ private ¸â¹öÇʵå¿Í ¸â¹ö¸Þ¼­µå¸¦ ¾ÆµéÀÌ ¹°·Á ¹Þ½À´Ï´Ù. ÀÌ ¶§ ¾ÆµéÀº ¾Æ¹öÁöÀÇ private¸â¹ö¸¦ ÀÚ½ÅÀÇ ¸â¹öó·³ ¸¶À½´ë·Î Á¢±Ù ÇÒ ¼ö ÀÖÀ»±î¿ä?( ÈùÆ®´Â publicÀ̶ó¸é ¿ÏÀüÈ÷ ÀÚ½ÅÀÇ °Í°ú ¶È°°ÀÌ ´Ù·ê ¼ö ÀÖ½À´Ï´Ù.)

 

ÀÌ Áú¹®¿¡ ´ëÇÑ ÇØ´äÀº Çѹø privateÀº ¿µ¿øÇÑ privateÀ̶ó´Â °ÍÀÔ´Ï´Ù. ¾ÆµéÀÌ ¾Æ¹öÁö·ÎºÎÅÍ »ó¼ÓÀ» ¹Þ¾Ò´Ù¸é ¾Æ¹öÁöÀÇ °ÍÀº ³»°Í, ³»°Íµµ ³»°ÍÀ̶ó´Â ¸íÁ¦°¡ Åë¿ëµË´Ï´Ù. ÇÏÁö¸¸ ¾Æ¹öÁöÀÇ ¸¶Áö¸· ³²Àº ÀÚÁ¸½ÉÀÎ private¸¸Å­Àº Á÷Á¢Á¢±ÙÀ» ºÒÇãÇÕ´Ï´Ù.

 

MyFather.java

public class MyFather {

             public String name;

             private String nickname;

             public MyFather(){

                           name ="À§´ëÇÑ ¾Æ¹öÁö";

                           nickname="»±ÄÚ";

             }

             public String getNickName(){

                           return nickname;

             }

}

Son.java

public class Son extends MyFather{

             public void sayFatherNames(){

                           System.out.println(name);

                           System.out.println(nickname);

             }

             public static void main(String[] args){

                           Son s = new Son();

                           s.sayFatherNames();

             }

}

C:\examples\4. Class for Basic Java>javac MyFather.java

C:\examples\4. Class for Basic Java>javac Son.java

Son.java:5: nickname has private access in MyFather

                System.out.println(nickname);

                                   ^

1 error

 

ÀÌ ¿¹Á¦´Â ¿¡·¯°¡ ¹ß»ýÇÕ´Ï´Ù. ¾Æ¹öÁöÀÇ privateÀ» ¸¶À½´ë·Î »ç¿ëÇÏ·Á´Ù ÄÄÆÄÀϵµ ÇÏÁö ¸øÇϰí ÀÖ½À´Ï´Ù. ¾Æ¹öÁöÀÇ nickname¸â¹öÇʵå´Â privateÀε¥ À̸¦ ¾ÆµéÀÌ ¸¶À½´ë·Î Á¢±ÙÇÏ´Â °ÍÀº ¿À·ùÀÔ´Ï´Ù. ÄÄÆÄÀÏ ¿¡·¯ÀÔ´Ï´Ù. ÇÏÁö¸¸ nameÀ̶ó´Â pubic¸â¹öÇʵå´Â ¸¶À½´ë·Î Á¢±ÙÇϰí ÀÖ½À´Ï´Ù. ¾ÆµéÀÇ Å¬·¡½º¸¦ µðÀÚÀÎ ÇÒ ¶§ ¸¶Ä¡ ÀÚ½ÅÀÇ ¸â¹ö º¯¼öó·³ ÀÌ¿ëÇϰí ÀÖ½À´Ï´Ù. ÇöÀç ¼³¸íÇϰí ÀÖ´Â °ÍÀº »ó¼ÓÀÇ °ü°è¿¡¼­ ³ªÅ¸³ª´Â µðÀÚÀΟÀÓÀÇ Á¢±ÙÁ¦¾îÀÔ´Ï´Ù. Çѹø privateÀº ¿µ¿øÇÑ privateÀÔ´Ï´Ù. privateÀÇ Á¢±ÙÁ¦¾î´Â staticÁ¢±Ù, »ó¼Ó°ü°è, ½ÇÇàŸÀÓÀÇ Á¢±ÙÁ¦¾î ¸ðµç °÷¿¡ ÇØ´ç ±× ±ÔÄ¢À» Áöŵ´Ï´Ù. Áï, privateÀº ¿¹¿Ü°¡ Á¸ÀçÇÏÁö ¾Ê½À´Ï´Ù.

 ±×·¸´Ù¸é ¾Æ¹öÁöÀÇ private¿¡ ¾î¶»°Ô Á¢±Ù ÇÒ ¼ö ÀÖÀ»±î¿ä? ³Ê¹«³ªµµ ¸ÍÇÑ Áú¹®ÀÌÁÒ. privateÀº public¸Þ¼­µå¸¦ ÅëÇØ¼­¸¸ Á¢±Ù ÇÒ ¼ö ÀÖ½À´Ï´Ù. ´õ ÀÌ»ó À̰ÍÀº ³íÇÏÁö ¾Ê¾Æµµ »·ÇÑ À̾߱â ÀÔ´Ï´Ù.  ÀÚ ±×·¸´Ù¸é ÀÌ·± Áú¹®À» ´Ù½Ã ´øÁ®º¸ÁÒ.

 

n        ¾Æ¹öÁöÀÇ ¸â¹ö´Â ½ÇÇà ŸÀÓ¿¡´Â privateÀ̸鼭 ¾Æµé¿¡°Ô´Â ¿ÏÀüÇÑ publicÀ̰íÀÚÇÕ´Ï´Ù. À̰ÍÀÌ ºÎ¸ðÀÇ ¸¶À½ ¾Æ´Ï°Ú½À´Ï±î? ÀÌ·¯ÇÑ ¹æ¹ýÀÌ ÀÚ¹Ù¿¡ Á¸ÀçÇÒ±î¿ä?

 

´äÀº ¿¹ÀÔ´Ï´Ù. À§ÀÇ Áú¹®Àº °´Ã¼ÀÇ ¸Þ¸ð¸®¸¦ »ý¼ºÇÑ ÈÄ Á¡(.)Âï°í Á¢±Ù ÇÒ ¶§´Â ¿Ïº®ÇÑ prviateÀ̸鼭 »ó¼Ó°ü°èÀÇ Å¬·¡½º µðÀÚÀΟÀÓ¿¡´Â ¿Ïº®ÇÑ publicÀ̰íÀÚ ÇÑ´Ù´Â °ÍÀÔ´Ï´Ù. À̸¦ ¹æ¹ý·ÐÀ» Á¦°øÇϱâ À§Çؼ­ ¾ÆÁ÷ ¼³¸íÇÏÁö ¾ÊÀº protectedÁ¢±ÙÁöÁ¤ÀÚ°¡ Á¸ÀçÇÕ´Ï´Ù.

 

n        À§ÀÇ ¿¹Á¦¿¡¼­ privateÀ» protected·Î °íÄ£´Ù¸é ÀÌ ¿¹Á¦´Â ¾ÆÁÖ ¸ÚÁö°Ô µ¿ÀÛ ÇÒ °ÍÀÔ´Ï´Ù.

 

°£´ÜÇÏ°Ô ¼³¸íÀ» ÇßÁö¸¸ ´Ù½Ã ¼³¸íÀ» ÇÑ´Ù¸é protected ´Â »ó¼ÓÀÇ °ü°è¿¡¼­ ³ª¿Â´Ù. protected´Â private°ú ¶È°°´Ù. ¿ÜºÎ¿¡¼­´Â Á¢±Ù ºÒ°¡´ÉÇÏ´Ù. ±×¸®°í privateÀº »ó¼ÓÀ» ÇßÀ» ¶§µµ ÇÏÀ§ Ŭ·¡½º¿¡¼­µµ Á÷Á¢Á¢±Ù ºÒ°¡´ÉÇØÁø´Ù. ȤÀÚ´Â ÀÌ·± Àǹ®À» °¡Áú °ÍÀÌ´Ù. »ó¼ÓÀ» ¹Þ¾Ò´Ù¸é »óÀ§Å¬·¡½ºÀÇ ¸ðµç ¸â¹ö´Â ÇÏÀ§Å¬·¡½ºÀÇ ¸â¹ö°¡ µÇ´Â °ÍÀÌ ¾Æ´Ñ°¡¶ó´Â Àǹ®À» Á¦±âÇÒ °ÍÀÌ´Ù.

 

¸ðµç ¸é¿¡¼­ privateÀ» ¼öÇàÇϸ鼭 »ó¼ÓÀÇ °ü°è¿¡¼­¸¸ publicÀÇ ÇàÀ§¸¦ ÇÏ´Â °ÍÀÌ ¹Ù·Î protectedÀÔ´Ï´Ù. À̰ÍÀ» ´Ù¸£°Ô Ç¥ÇöÇÑ´Ù¸é ¾Æ¹öÁöÀÇ ¸ðµç °ÍÀº »ó¼ÓÀ» ¹Þ¾Æ Á÷Á¢ »ç¿ëÇÒ ¼ö ÀÖÁö¸¸ ¾Æ¹öÁöÀÇ private¸¸Àº Á÷Á¢Á¢±Ù ¸øÇÕ´Ï´Ù. ÇÏÁö¸¸ ¾Æ¹öÁöÀÇ protected´Â ¾ÆµéÀÇ ¸â¹öó·³ »ç¿ëÇÒ ¼ö ÀÖ½À´Ï´Ù. ÀÌ·¸°Ô ÇÏ¸é ¾Æ¹öÁöÀÇ ¸ðµç °ÍÀÌ ¾ÆµéÀÇ °ÍÀÌ µÈ´Ù°í ÇØµµ °ú¾ðÀÌ ¾Æ´Ï´Ù. Áï ¾Æ¹öÁö°Íµµ ³»°Í ³»°Íµµ ³»°ÍÀ̶ó´Â ¸»À» »ç¿ëÇÒ ¼ö Àִ°ÍÀÔ´Ï´Ù. ÀÌ·¯ÇÑ ¸ðµç °ü°è¸¦ À§ÀÇ ¿¹Á¦¸¦ ÀÌ¿ëÇÏ¿© ³ªÅ¸³»¸é ¾Æ·¡ÀÇ ±×¸²°ú °°½À´Ï´Ù.

 

 

¸â¹öÇʵ常À» À̾߱âÇϴµ¥ ¸â¹ö¸Þ¼­µå´Â ¾î¶»°Ô µÇ´À³Ä°í ÇÏ½Å´Ù¸é ¶È°°´Ù°í À̾߱â ÇÒ ¼ö ¹Û¿¡ ¾ø½À´Ï´Ù. ¸Þ¼­µå³ª º¯¼ö³ª ¶È °°Àº ³ðµéÀ̴ϱî¿ä. °´Ã¼ÁöÇâ¿¡¼­µµ ºÎ¸ð Àڽİü°èÀÇ ÀηûÀÇ ¹ýÄ¢Àº ¿ÏÀüÇÏ°Ô Áö۰í ÀÖ´Â °ÍÀÌ ½Å±âÇÏÁö ¾Ê½À´Ï±î? ¾Ë°í º¸¸é ÀÚ¹Ù´Â °´Ã¼ ÁöÇâ±â¼úÀÇ Áø¼ö¸¸ ¸ð¾Æ µÐ ¾ð¾îÀÔ´Ï´Ù. °ñÄ¡ ¾ÆÇ OOP°³³äÀº ³»ºÎ·Î ¼û±â¸é¼­ ¸íÈ®ÇÏ°í °£´ÜÇÑ ¹æ¹ý·ÐÀ» Á¦½ÃÇÏ´Â °ÍÀÌ ÀÚ¹Ù¶ó´Â ¾ð¾îÀÔ´Ï´Ù.

 

 

4.4.6 ¶óÀ̺귯¸®¸¦ ÀÌ¿ëÇÑ »ó¼Ó

 ÀÚ¹Ù ¶óÀ̺귯¸®¸¦ »ç¿ëÇÏ¿© »ó¼ÓÀ» ¹è¿ö º¸µµ·Ï ÇÏÁÒ. ÇöÀç´Â °£´ÜÈ÷ À©µµ¿ì âÀ» ¸¸µé¾î ¶ç¿ö º¸µµ·Ï ÇϰڽÀ´Ï´Ù. »ó¼ÓÀ» ÇϰíÀÚ ÇÑ´Ù¸é »ó¼ÓÇÒ Å¬·¡½º¸¦ ¶óÀ̺귯¸®¸¦ import½ÃŰ°Å³ª ¾Æ´Ï¸é °°Àº µð·ºÅ丮¿¡ µÎ¾î¾ß ÇÑ´Ù.

 

import java.awt.*;

 

ÇöÀç java.awt³»¿¡ FrameÀ̶ó´Â Ŭ·¡½º°¡ Á¸ÀçÇÕ´Ï´Ù. ÀÌ Å¬·¡½º¸¦ »ç¿ëÇϰڴٴ °ÍÀÔ´Ï´Ù. ¹°·Ð, ÀÌ Å¬·¡½º´Â JDK¿¡¼­ ±âº»À¸·Î Á¦°øÇØ ÁÖ´Â ¶óÀ̺귯¸®ÀÔ´Ï´Ù. ¿ì¸®°¡ »ó¼ÓÇϰųª ¾Æ´Ï¸é »ç¿ëÇÏ·Á°í ÇÏ´Â ¶óÀ̺귯¸®¸¦ importÇÏ´Â ¿ªÇÒÀ» ÇÕ´Ï´Ù. °°Àº µð·ºÅ丮¿¡ ÀÖ´Ù¸é importÇÒ Çʿ䰡 ¾ø½À´Ï´Ù. ÀÚ¹Ù¸¦ ¼³Ä¡ÇÒ ¶§ ¡°classpath =.;¡± À̶ó°í Àâ¾Æ ÁØ °ÍÀº °°Àº µð·ºÅ丮ÀÇ Å¬·¡½º¸¦ importÇÏÁö ¾Ê¾Æµµ µÇ´Â ¿ªÇÒÀ» ÇÕ´Ï´Ù. ¿ì¸®°¡ ¸¸µç ¶óÀ̺귯¸®°¡ ÀÖ´Ù¸é ´ç¿¬È÷ classpath¿¡ Ãß°¡½ÃÄÑ ÁÖ¾î¾ß ÇÕ´Ï´Ù. ÀÌ·¸°Ô ÇÏÁö ¾Ê´Â´Ù¸é ÇØ´ç Ŭ·¡½º¸¦ ÇÁ·Î±×·¥¿¡¼­ »ç¿ëÇÒ ¼ö ¾ø½À´Ï´Ù. °£´ÜÇÑ ¿¹¸¦ ¸¸µé¾î º¸µµ·Ï ÇÏÁÒ.

 

MyFrame .java(¶óÀ̺귯¸® »ó¼ÓÀ» Å×½ºÆ® Çϱâ À§ÇÑ ¿¹Á¦)

import java.awt.*;

public class MyFrame extends Frame{

             public static void main(String[] args){

                           MyFrame m = new MyFrame();

                           m.setSize(200,200);

                           m.show();

             }

}

C:\examples\4. Class for Basic Java>javac MyFrame.java

C:\examples\4. Class for Basic Java>java MyFrame

À©µµ¿ì¸¦ ´Ý°íÀÚ ÇÑ´Ù¸é Ctrl-C¸¦ ÄܼÖâ¿¡¼­ ´©¸£½Ã¸é µË´Ï´Ù.

 

4.4.7 °á·Ð

ÀÌ Àý¿¡¼­ ¿ì¸®´Â ¾î´À Á¤µµ »ó¼ÓÀÌ ¹«¾ùÀÎÁö¿¡ ´ëÇØ¼­ ¾Ë¾Ò½À´Ï´Ù. ¹°·Ð »ó¼ÓÀÇ °³³äÀº Àß ¸¸µé¾î µÐ Ŭ·¡½º¸¦ Àç »ç¿ëÇÒ ¼ö ÀÖÀ» ¶§´Â ¾ÆÁÖ È¿°ú ÀûÀÔ´Ï´Ù. ±×¸®°í °£´ÜÇÑ Á¢±ÙÁ¦¾îÀÇ ¿øÄ¢¸¸ ÁöŲ´Ù¸é ¾ÆÁÖ À¯¿ëÇÏ°Ô »ç¿ëÇÒ ¼ö ÀÖ½À´Ï´Ù. ÇÏÁö¸¸ »ó¼Ó±¸Á¶¸¦ À߸ø ÀâÀ¸¸é ÇÁ·Î±×·¥Àº ¾û¸ÁÀÌ µÇ°í ¸¿´Ï´Ù. »ó¼ÓÀº µÎ °¡Áö ½Ã°¢¿¡¼­ ¹Ù¶ó º¼ ¼ö ÀÖ½À´Ï´Ù. ÀÚ½ÅÀÌ ÀüüÀûÀÎ ÇÁ·Î±×·¥ÀÇ ±¸Á¶¸¦ Àâ±â À§Çؼ­ »ó¼Ó±¸Á¶¸¦ ¸¸µå´Â ÀÔÀå°ú ¸¸µé¾îÁ® Àִ Ŭ·¡½º³ª ¶óÀ̺귯¸®¸¦ ÀÌ¿ëÇÏ´Â ÀÔÀåÀ¸·Î ³ª´­ ¼ö ÀÖ½À´Ï´Ù. ¾î¶°ÇÑ °æ¿ìµç »ó¼ÓÀÇ °³³äÀ» Àß ÆÄ¾ÇÇÏÁö ¸øÇÏ¸é »ó¼Ó¿¡¼­ ³ªÅ¸³ª´Â ÀåÁ¡µéÀ» ÀÌ¿ëÇϱ⿡´Â ¾î·Æ½À´Ï´Ù.

 

ÀϹÝÀûÀÎ »ó¼Ó°³³äÀ» ¾Ë°í ÀÖ´Ù¸é ¶óÀ̺귯¸®¸¦ ÀÌ¿ëÇÏ´Â °ÍÀº ±×·¸°Ô ¾î·ÆÁö ¾Ê½À´Ï´Ù. ÇÏÁö¸¸ ÀÚ½ÅÀÇ ÇÁ·Î±×·¥ ±¸Á¶¸¦ »ó¼Ó ±¸Á¶¿¡ ¸Â°Ô Àß ¸¸µé±â À§Çؼ­´Â ÀÛ¾÷ ¼³°è¿Í ºÐ¼®ÀÌ ¹Ýµå½Ã Æ÷ÇÔ µÇ¾î¾ß ÇÕ´Ï´Ù. ÀÛ¾÷ ºÐ¼®°ú ¼³°è°¡ ¾ø´Â »ó¼Ó ±¸Á¶´Â °á±¹¿¡ ¾²·¹±âÅëÀ¸·Î º¸³»¾ß°ÚÁÒ. ¿ì¸®°¡ ¸¶Áö¸·À¸·Î ¹è¿î Á¢±ÙÁ¦¾î´Â protectedÀÔ´Ï´Ù. ÀÌ protectedÀÇ Áø¼ö(òÒâ³)´Â ¹Ù·Î ClonableÀ̶ó´Â ÀÎÅÍÆäÀ̽º¸¦ ÀÌ¿ëÇÒ ¶§ »ç¿ëµË´Ï´Ù. °´Ã¼´Â ÂüÁ¶¸¦ ±âº»À¸·Î Çϰí Àֱ⶧¹®¿¡ °´Ã¼ÀÇ ¸Þ¸ð¸®¸¦ ÀϹÝÀûÀÎ º¹»ç±â¹ýÀ¸·Î º¹»çÇÒ ¼ö´Â ¾ø½À´Ï´Ù. ÀÌ·¯ÇÑ ¹®Á¦¸¦ ÇØ°áÇϱ⠻ç¿ëµÇ´Â Clonable±â¹ý¿¡¼­ protected¸Þ¼­µå¸¦ »ç¿ëÇÏ°Ô µË´Ï´Ù. ÀÌ ClonableÀº ´Ù¸¥ Àå¿¡¼­ ´Ù½Ã ¼³¸íÇϵµ·Ï ÇϰڽÀ´Ï´Ù.



jabookÀúÀÚ¸íÇÔ
Á¦¸ñ:¼Ò¼³°°ÀºÀÚ¹Ù1ºÎ
ÀúÀÚ:ÃÖ¿µ°ü