ÀÚ¹Ù 1.1 ¹®¹ý-³»ºÎ Ŭ·¡½º

Á¦ÀÛ : À±°æ±¸
Á¦ÀÛÀÏ : 1997. 5. 22
ÃÖÁ¾ °»½ÅÀÏ : 1999. 12. 10
ÁÖ¿ä °Ë»ö¾î : ³»ºÎ Ŭ·¡½º, À̺¥Æ® ¾î´ðÅÍ Å¬·¡½º

ÇÊÀÚÀÇ µ¿ÀÇ ¾øÀÌ º¹Á¦ ¹× ¹«´Ü ÀüÁ¦ÇÒ ¼ö ¾ø½À´Ï´Ù.
Copyright (c) 1997 Yoon Kyung Koo(yoonforh@yahoo.com), All rights reserved.


1. ³»ºÎ Ŭ·¡½º(Inner Class)¶õ ¹«¾ùÀΰ¡?

ÀÚ¹Ù 1.1¿¡¼­ ´Þ¶óÁø ¹®¹ý »çÇ× Áß °¡Àå µÎµå·¯Áø °ÍÀº ¹Ù·Î ³»ºÎ Ŭ·¡½º¶ó´Â °³³äÀÌ´Ù.
³»ºÎ Ŭ·¡½º ¿Ü¿¡´Â ¹®¹ýÀûÀ¸·Î Å©°Ô ´Þ¶óÁø ³»¿ëÀ» ã±â´Â ¾î·Æ´Ù.
³»ºÎ Ŭ·¡½ºÀÇ Á¤È®ÇÑ °³³äÀ» °®ÃßÁö ¸øÇÏ¸é ºó¹øÇÏ°Ô »ç¿ëµÇ´Â ÀÌ °³³ä¿¡ ´çȲÇÏ°Ô µÇ°í ¶Ç ¼Ò½º Çص¶¿¡ È¥¶õÀ» ´À³¢°Ô µÈ´Ù.

ÀÚ¹Ù 1.0ÀÇ Å¬·¡½º °³³ä°ú ³»ºÎ Ŭ·¡½º

ÀÚ¹Ù 1.0¿¡¼­´Â ¸ðµç Ŭ·¡½º´Â ¾î¶² ÆÐÅ°Áö¿¡ Æ÷ÇԵǴ Ŭ·¡½º¿´´Ù.
Áï, ÇöÀç ¼Ò½º ÆÄÀÏ¿¡ ¸ðµç Ŭ·¡½º°¡ Æ÷ÇԵǾî ÆÐÅ°Áö À̸§ÀÌ »ý·«µÇ´Â ±âº» ÆÐÅ°ÁöÀÇ Å¬·¡½º¶ó ÇÏ´õ¶óµµ ¸ðµç Ŭ·¡½º´Â ÆÐÅ°Áö¿¡ ¼ÓÇϵµ·Ï µÇ¾î ÀÖ¾ú´Ù.
Ŭ·¡½º °£ÀÇ Á¢±Ù ±ÇÇÑ¿¡¼­µµ Ŭ·¡½º °£ÀÇ »ó¼Ó ±¸Á¶(ÇÏÀ§ Ŭ·¡½ºÀÌ³Ä ¾Æ´Ï³Ä)¿Í °°Àº ÆÐÅ°ÁöÀÌ³Ä ¾Æ´Ï³Ä ÇÏ´Â ¹®Á¦°¡ Á¢±Ù ±ÇÇÑÀ» ³ª´©´Â µÎ °¡Áö ±âÁØÀÌ µÊÀ» »ó±âÇغ¸¶ó.
ÀÌ·¯ÇÑ Å¬·¡½º¸¦ Top Level Ŭ·¡½º¶ó°í ºÎ¸£ÀÚ. ¿©±â¼­ Top LevelÀº Ŭ·¡½º »ó¼Ó ±¸Á¶ÀÇ ¼öÁØ°ú´Â ¹«°üÇÏ´Ù.

³»ºÎ Ŭ·¡½º´Â Á» Ưº°ÇÑ Á¸ÀçÀÌ´Ù.
À̸§Àº Ŭ·¡½º ³»ºÎ¿¡ Á¸ÀçÇÏ´Â(nested) Ŭ·¡½º¶ó´Â ¶æÀ» °¡Áø´Ù. Áï, ÀÚ¹Ù 1.0ÀÇ Å¬·¡½º ³»ºÎ¿¡ ¸î °¡Áö ÇüÅ·ΠŬ·¡½º¸¦ ¶Ç Á¤ÀÇÇÒ ¼ö ÀÖ´Ù´Â °ÍÀÌ´Ù.

Á»´õ Á¤È®ÇÏ°Ô Ç¥ÇöÇÏÀÚ¸é ÀÌ ³»ºÎ Ŭ·¡½ºµµ µÎ °¡Áö Á¾·ù°¡ ÀÖ´Ù. ÁøÁ¤ÇÑ ÀǹÌÀÇ ³»ºÎ(inner) Ŭ·¡½º°¡ ÀÖ°í nested top level Ŭ·¡½º°¡ ÀÖ´Ù.
nested top level Ŭ·¡½º´Â ºñ·Ï Ŭ·¡½º ³»ºÎ¿¡ Á¸ÀçÇϱä ÇÏÁö¸¸ static ¸â¹ö·Î ¼±¾ðµÇ´Â Ŭ·¡½º·Î À̵éÀº ºñ·Ï ÆÐÅ°ÁöÀÇ ¸â¹ö´Â ¾Æ´ÏÁö¸¸ ¿ÜºÎ¿¡¼­ ÀڽŸ¸ÀÇ ÀνºÅϽº¸¦ ¸¸µé ¼ö ÀÖ´Ù´Â Á¡¿¡¼­ top level Ŭ·¡½º·Î ºÐ·ùµÈ´Ù.

ÇÊÀÚ´Â ÀڽŸ¸ÀÇ ÀνºÅϽº¸¦ ¸¸µé ¼ö ÀÖ´Â netsted top level class¸¦ Æ÷ÇÔÇÑ ¸ðµç nested class¸¦ ¾È±ä Ŭ·¡½º, ±×·¸Áö ¸øÇÑ Å¬·¡½º(inner class)¸¦ ³»ºÎ Ŭ·¡½º·Î ¹ø¿ªÇÏ´Ï ¿ÀÇØ ¾ø±æ ¹Ù¶õ´Ù.

¾È±ä Ŭ·¡½º ---+--- Åé·¹º§ ¾È±ä Ŭ·¡½º (staticÀ¸·Î ¼±¾ðµÈ ¸â¹ö Ŭ·¡½º)
               |
               +--- ³»ºÎ Ŭ·¡½º (½º½º·Î´Â ÀνºÅϽºÈ­µÇÁö ¸øÇÑ´Ù)

³»ºÎ Ŭ·¡½º¸¦ Æ÷ÇÔÇÑ ÀÌµé ¾È±ä Ŭ·¡½º´Â ÄÄÆÄÀÏ·¯°¡ º°µµÀÇ Å¬·¡½º·Î ºÐ¸®ÇÏ¿© ÄÄÆÄÀÏÇϱ⠶§¹®¿¡ (Áï, ¾È±ä Ŭ·¡½º´Â ÀÚ¹Ù °¡»ó ±â°è¿¡¼­ ±¸ÇöµÇ´Â °ÍÀÌ ¾Æ´Ï´Ù) ³»ºÎ Ŭ·¡½º°¡ Æ÷ÇÔµÈ Äڵ带 »ç¿ëÇÑ´Ù°í Çؼ­ ±âÁ¸ ¹öÀü°ú ȣȯ¼ºÀÌ ¾ø¾îÁöÁö´Â ¾Ê´Â´Ù.

2. ³»ºÎ Ŭ·¡½ºÀÇ ¼¼ °¡Áö ÇüÅÂ

1) Ŭ·¡½ºÀÇ ¸â¹ö·Î Á¸ÀçÇÏ´Â ³»ºÎ Ŭ·¡½º

¸â¹ö·Î Á¸ÀçÇϹǷΠ¸â¹ö µµ±¸³ª ¸â¹ö ÇÊµå ¾Õ¿¡ ¿À´Â °Íó·³ public, private, static, final µîÀÇ Á¦ÇÑÀÚ¸¦ »ç¿ëÇÒ ¼ö ÀÖ´Ù.

2) À̸§ ÀÖ´Â Áö¿ª Ŭ·¡½º

µµ±¸³ª ºí·Ï ³»ºÎ¿¡¼­¸¸ Á¸ÀçÇϴ Ŭ·¡½ºÀÌ´Ù. ÀÌ Å¬·¡½º´Â ÇØ´ç ºí·Ï ³»¿¡¼­¸¸ À¯È¿ÇÏ´Ù. Áö¿ª Ŭ·¡½º´Â ¸â¹ö°¡ ¾Æ´Ï¹Ç·Î public, private, static, final µîÀÇ Á¦ÇÑÀÚ°¡ ¿Ã ¼ö ¾ø´Ù. ºí·ÏÀÇ scope¿Í Ŭ·¡½ºÀÇ scope°¡ µ¿ÀÏÇϱ⠶§¹®ÀÌ´Ù.

3) À̸§ ¾ø´Â Ŭ·¡½º

Áö¿ª Ŭ·¡½ºÀÇ À̸§ÀÌ º° Àǹ̰¡ ¾øÀ» ¶§, ¾Æ¿¹ »ý·«À» Çã¿ëÇÑ´Ù. Áö¿ª Ŭ·¡½ºÀ̹ǷΠ¿ª½Ã ºí·Ï ³»¿¡¼­¸¸ À¯È¿ÇÏ¸ç º¸Åë ºí·Ï ³»¿¡¼­ new ¿¹¾à¾î¿Í ÇÔ²² »ç¿ëµÈ´Ù.

3. ³»ºÎ Ŭ·¡½ºÀÇ ÀüÇüÀûÀÎ »ç¿ë ¿¹:À̺¥Æ® ¾î´ðÅÍŬ·¡½º

ÀÚ¹Ù 1.1 ¹öÀü¿¡¼­ ´Þ¶óÁø À̺¥Æ® ¸ðµ¨(AWT ÄÚµå ¾÷±×·¹À̵å ÂüÁ¶)Àº °¢ À̺¥Æ®¿¡ Source¿Í Listener °´Ã¼¸¦ ÁöÁ¤Çϵµ·Ï ÇÏ°í ÀÖ´Ù. Source´Â À̺¥Æ®¸¦ ¹ß»ý½ÃÅ°´Â °´Ã¼ÀÌ°í Listener´Â Source·ÎºÎÅÍ À̺¥Æ®¸¦ °Ç³×¹Þ´Â °´Ã¼ÀÌ´Ù. Listener °´Ã¼´Â addXXXListener ÇüÅÂÀÇ µµ±¸¸¦ ÅëÇÏ¿© ¼Ò½º °´Ã¼¿¡ µî·ÏÇÏ°Ô µÇ´Âµ¥ ÇØ´ç À̺¥Æ®¸¦ ó¸®ÇÒ ¼ö ÀÖ±â À§Çؼ­´Â ÇØ´ç À̺¥Æ®ÀÇ Listener ÀÎÅÍÆäÀ̽º¸¦ ±¸ÇöÇØ¾ß ÇÑ´Ù. ÇϳªÀÇ À̺¥Æ®¸¦ ó¸®Çϱâ À§Çؼ­µµ Listener ÀÎÅÍÆäÀ̽º°¡ °¡Áö´Â ¸ðµç ¸â¹ö µµ±¸µéÀ» ±¸ÇöÇØ¾ß ÇϹǷΠºÒÇÊ¿äÇÏ°Ô ÄÚµùÀÌ ´Ã¾î³­´Ù. ¿¹¸¦ µé¾î À©µµ¿ì°¡ ´Ý±â´Â À̺¥Æ®¸¦ ó¸®ÇÏ°íÀÚ ÇÑ´Ù¸é WindowEvent¸¦ ó¸®ÇØ¾ß ÇÑ´Ù. ÀÌ°ÍÀº WindowListener ÀÎÅÍÆäÀ̽º¸¦ ±¸ÇöÇÏ¿© windowClosing µµ±¸¿¡¼­ 󸮸¦ ÇØ¾ß ÇÑ´Ù. ÇÏÁö¸¸ ÀÌ ÀÎÅÍÆäÀ̽º´Â ¸ðµÎ 7°³ÀÇ µµ±¸¸¦ °¡Áø´Ù. ÀÚ¹Ù¿¡¼­ ÀÎÅÍÆäÀ̽º¸¦ ±¸ÇöÇÑ´Ù´Â °ÍÀº ÀÎÅÍÆäÀ̽ºÀÇ ¸ðµç µµ±¸¸¦ ±¸ÇöÇÑ´Ù´Â ÀǹÌÀÌ´Ù. (ºñ·Ï ±×°ÍÀÇ ¸öü¿¡´Â ¾Æ¹« ³»¿ëÀÌ ¾ø´Ù ÇÏ´õ¶óµµ Çѹø ´õ ½áÁÖ¾î¾ß ÇÑ´Ù.) ÀÌ°ÍÀ» Çѹø Àû¾îº¸ÀÚ.

import java.awt.Frame;
import java.awt.event.*;

public class A extends Frame implements WindowListener {
    A () {
        addWindowListener(this); // Listener Ŭ·¡½º°¡ ÀÚ±â ÀÚ½Å(this)
    }
    public static void main(String[] args) {
        A a=new A();
        a.show();
    }
    public void windowClosing(WindowEvent we) {  // À¯ÀÏÇÏ°Ô ±¸ÇöÇÏ°í ½ÍÀº µµ±¸
        System.out.println("before window is closed");
        System.exit(0);
    }
    /* ¾Æ·¡ÀÇ 6°³ µµ±¸´Â ¿©±â¼­´Â ¾Æ¹«·± °ü½ÉÀÌ ¾øÁö¸¸
       WindowListener ÀÎÅÍÆäÀ̽º¸¦ ±¸ÇöÇÏ´Â ¿øÁË·Î
       ¸öüµµ ¾øÀÌ ÄÚµù Ç°¸¸ Ãà³»¾ß ÇÔ. */
    public void windowClosed(WindowEvent we) {
    }
    public void windowDeiconified(WindowEvent we) {
    }
    public void windowIconified(WindowEvent we) {
    }
    public void windowActivated(WindowEvent we) {
    }
    public void windowDeactivated(WindowEvent we) {
    }
    public void windowOpened(WindowEvent we) {
    }
}

ºÒÇÊ¿äÇÑ ÄÚµù Ç°À» ÁÙÀ̱â À§ÇØ ³»ºÎ Ŭ·¡½º¸¦ È°¿ëÇÒ ¼ö ÀÖµµ·Ï ÀÚ¹Ù 1.1¿¡¼­´Â ¾î´ðÅÍ Å¬·¡½º¸¦ Á¦°øÇÑ´Ù.
java.awt.events ÆÐÅ°Áö¿¡ ÀÖ´Â À̺¥Æ® Ŭ·¡½ºµéÀº ComponentAdapter, ContainerAdapter, FocusAdapter, KeyAdapter, MouseAdapter, MouseMotionAdapter, WindowAdapter ¸ðµÎ 7°³·Î À̵éÀº °¢°¢ ÀÚ½ÅÀÇ À̸§¿¡¼­ Adapter¸¦ »©°í Listener¸¦ ºÙÀÎ ÀÎÅÍÆäÀ̽º¸¦ ¾Æ¹« ¸öü ¾øÀÌ ¹Ì¸® ±¸ÇöÇسõÀº Ŭ·¡½ºµéÀÌ´Ù. Áï, ÀÎÅÍÆäÀ̽º¸¦ ±¸ÇöÇÏ¸é °¢ µµ±¸¸¦ ¸ðµÎ ±¸ÇöÇØ¾ß ÇÏÁö¸¸ ÀÌ¹Ì ¾Æ¹« ¸öü ¾øÀÌ ±¸ÇöÇسõÀº Adapter Ŭ·¡½º¸¦ »ó¼ÓÇϸé ÇÊ¿äÇÑ µµ±¸¸¸ µ¤¾î¾²¸é µÈ´Ù.
ÀÚ¹Ù ¾ð¾îÀÇ Æ¯Â¡À» ÃÖ´ëÇÑ »ì·Á ÄÚµù Ç°À» ÁÙ¿©ÁÖ´Â ÆíÀÇ Å¬·¡½ºµéÀÎ ¼ÀÀÌ´Ù.
ÀÚ, WindowAdapter Ŭ·¡½º¸¦ »ç¿ëÇÏ¿© À§ÀÇ Äڵ带 ´Ü¼øÇÏ°Ô Çغ¸ÀÚ.

¸ÕÀú Ŭ·¡½º ¼±¾ð¹®ÀÇ ´ÙÀ½ ÀÎÅÍÆäÀ̽º ¼±¾ð¹®Àº »èÁ¦ÇÑ´Ù.

/* implements WindowListener */

WindowListener ÀÎÅÍÆäÀ̽ºÀÇ 7°³ µµ±¸´Â »ç¶óÁö°í addActionListenerÀÇ ÀÎÀÚ(WindowEvent ó¸® °´Ã¼)ÀÎ WindowListener´Â this°¡ ¾Æ´Ï¶ó WindowListener ÀÎÅÍÆäÀ̽º¸¦ ¹Ì¸® ±¸ÇöÇسõÀº WindowAdapter Ŭ·¡½º¸¦ »ó¼ÓÇÑ °´Ã¼°¡ µÈ´Ù.
»ý¼ºÀÚ µµ±¸¿¡¼­ addActionListener ±¸¹®À» ¹Ù²ÙÀÚ.

A() {
    addActionListener(this);
}

´ë½Å¿¡ ´ÙÀ½°ú °°ÀÌ Áö¿ª Ŭ·¡½º¸¦ Æ÷ÇÔÇÏ°Ô µÈ´Ù.

1) Áö¿ª Ŭ·¡½º ¹öÀü

A() {
    class AWindowAdapter extends WindowAdapter {
        public void windowClosing(WindowEvent we) {
            System.out.println("before window is closed");
            System.exit(0);
        }
    } // end of class AWindowAdapter's declaration
    addWindowListener(new AWindowAdapter()); // Listener °´Ã¼°¡ AWindowAdapter Ŭ·¡½º ÀνºÅϽº
}

»ç½Ç À̺¥Æ® ¾î´ðÅÍ Å¬·¡½º¸¦ »ç¿ëÇÏ´Â ´ëºÎºÐÀÇ °æ¿ì¿¡ º°µµÀÇ À̸§ÀÌ ÇÊ¿ä¾ø´Ù. À§¿¡¼­µµ ¾Æ¿¹ ÀνºÅϽº º¯¼ö À̸§Á¶Â÷ ¸¸µéÁö ¾Ê¾Ò´Ù. À̸§¾ø´Â Áö¿ª Ŭ·¡½º¸¦ »ç¿ëÇÏ¸é ´õ¿í °£´ÜÇØÁø´Ù. ¾Õ¿¡¼­ ¼³¸íÇßµíÀÌ À̸§¾ø´Â Áö¿ª Ŭ·¡½º´Â new ¿¹¾à¾î¸¦ »ç¿ëÇÏ¿© Ŭ·¡½º »ó¼ÓÀ» ÇÔÃàÇÑ´Ù. ´ÙÀ½°ú °°ÀÌ ¹Ù²ï´Ù.

2) À̸§À» »ý·«ÇÑ Áö¿ª Ŭ·¡½º ¹öÀü

A() {
    addWindowListener(
        new WindowAdapter() {
            public void windowClosing(WindowEvent we) {
                System.out.println("before window is closed");
                System.exit(0);
            }
        } // end of anonymous class's declaration
    ); // Listener °´Ã¼°¡ À̸§ ¾ø´Â WindowAdapter Ŭ·¡½º ÀνºÅϽº
}

ÀÚ¹Ù 1.1ÀÇ »õ·Î¿î À̺¥Æ® ¸ðµ¨¿¡ µû¶ó ÇÁ·Î±×·¥À» ÀÛ¼ºÇÑ´Ù¸é À̺¥Æ® ¾î´ðÅÍ Å¬·¡½º »ç¿ëÀº °ÅÀÇ »ýÈ°¿¡ °¡±î¿ï °ÍÀÌ´Ù. ¶Ç ´ëºÎºÐÀÇ À̺¥Æ® ¾î´ðÅÍ´Â À̸§¾ø´Â Áö¿ª Ŭ·¡½º·Î »ç¿ëµÉ °ÍÀÌ´Ù.
³»ºÎ Ŭ·¡½ºÀÇ ¹®¹ý À¯Çü¿¡ Àͼ÷ÇØÁö±â À§Çؼ­µµ À§¿Í °°Àº ÄÚµå Çü½ÄÀ» ¹Ýº¹Çؼ­ »ç¿ëÇÒ °ÍÀ» ±ÇÇÑ´Ù.

³»ºÎ Ŭ·¡½º ÇнÀÀ» µ½±â À§Çؼ­ À§ÀÇ Äڵ带 ¸â¹ö Ŭ·¡½º ¹öÀüÀ¸·Î ¿Å°Ü º¸ÀÚ. »ç½Ç À̸§ ÀÖ´Â Áö¿ª Ŭ·¡½º ¹öÀü¿¡¼­ Ŭ·¡½º ¼±¾ð¹®À» µµ±¸ ³»¿¡¼­ µµ±¸ ¹ÛÀ¸·Î »©³»¸é µÈ´Ù.

3) ¸â¹ö Ŭ·¡½º ¹öÀü

public class A extends Frame {
    class AWindowAdapter extends WindowAdapter {
        public void windowClosing(WindowEvent we) {
            System.out.println("before window is closed");
            System.exit(0);
        }
    } // end of class AWindowAdapter's declaration

    A () {
        addWindowListener(new AWindowAdapter()); // Listener °´Ã¼°¡ AWindowAdapter Ŭ·¡½º ÀνºÅϽº
    }
    public static void main(String[] args) {
        A a=new A();
        a.show();
    }
}

4) °¢ ¹öÀüÀÇ Å¬·¡½º ÆÄÀÏ À̸§

ÀÚ¹Ù 1.1Àº ÀÚ¹Ù 1.0°úÀÇ ¹ÙÀ̳ʸ® ȣȯ¼º µîÀ» °í·ÁÇÏ¿© ³»ºÎ Ŭ·¡½º¶ó´Â »õ·Î¿î °³³äÀ» ¹®¹ý¿¡ Ãß°¡Çϸ鼭 ¸î °¡Áö Æí¹ý(?)À» »ç¿ëÇÏ¿´´Ù. Áï ³»ºÎ Ŭ·¡½º´Â ÀüÇô Ŭ·¡½º ¹ÙÀ̳ʸ® ÆÄÀÏÀ» °¡Áö°í ½ÇÇàÇÏ´Â ÀÚ¹Ù °¡»ó ±â°è¿¡´Â ¿µÇâÀ» ¹ÌÄ¡Áö ¾Êµµ·Ï °í·ÁµÇ¾ú´Ù. Áï, ÀÚ¹Ù 1.1ÀÇ »õ·Î¿î ±â´ÉÀ» ÀüÇô »ç¿ëÇÏÁö ¾Ê¾Ò´Ù¸é ³»ºÎ Ŭ·¡½º ¹®¹ýÀ» »ç¿ëÇÑ ÀÚ¹Ù ¼Ò½º Äڵ带 ÀÚ¹Ù 1.1ÀÇ ÄÄÆÄÀÏ·¯·Î ÄÄÆÄÀÏÇÑ ´ÙÀ½ ÀÚ¹Ù 1.0ÀÇ °¡»ó ±â°è¿¡¼­ (Áï, ÀÚ¹Ù 1.0ÀÇ ÀÎÅÍÇÁ¸®ÅÍ·Î) ½ÇÇàÇÏ¿©µµ ½ÇÇàÇÒ ¼ö ÀÖ´Ù´Â °ÍÀÌ´Ù.
½ÇÁ¦·Î ³»ºÎ Ŭ·¡½º´Â $ ºÎÈ£¸¦ Æ÷ÇÔÇÑ º°µµÀÇ Å¬·¡½º ÆÄÀÏ·Î ÄÄÆÄÀϵȴÙ.
À§ÀÇ ¿¹Á¦¿¡¼­ °¢ ¹öÀüÀ» ÄÄÆÄÀÏÇÏ¸é ´ÙÀ½ Ŭ·¡½º ÆÄÀϵéÀÌ »ý¼ºµÈ´Ù.

(1) ¿ø·¡ÀÇ A Ŭ·¡½º(³»ºÎ Ŭ·¡½º »ç¿ëÇÏÁö ¾ÊÀº ¹öÀü)
´ç¿¬ÇÏÁö¸¸ ÇϳªÀÇ Å¬·¡½º¹Û¿¡ ¾øÀ¸¹Ç·Î ÇϳªÀÇ Å¬·¡½º ÆÄÀϸ¸ »ý¼ºµÈ´Ù.

(2) ¸â¹ö Ŭ·¡½º ¹öÀü
A Ŭ·¡½º ¸â¹öÀÎ AWindowAdapter Ŭ·¡½º´Â $ºÎÈ£¸¦ »ç¿ëÇÏ¿© A$AWindowAdapter.class ÆÄÀÏÀ» »ý¼ºÇÑ´Ù.

(3) À̸§ ÀÖ´Â Áö¿ª Ŭ·¡½º ¹öÀü
Áö¿ª Ŭ·¡½º´Â ºí·ÏÀ̳ª µµ±¸ ¾È¿¡¼­¸¸ Á¤ÀǵǹǷΠºí·ÏÀ̳ª µµ±¸µéÀ» ±¸º°Çϱâ À§ÇÏ¿© ¹øÈ£¸¦ »ç¿ëÇÑ´Ù. Áï, ÀÌ °æ¿ì¿¡´Â Áö¿ª Ŭ·¡½º°¡ ÇϳªÀ̹ǷΠA$1$AWindowAdapter.class ÆÄÀÏÀÌ »ý¼ºµÈ´Ù.

(4) À̸§ ¾ø´Â Áö¿ª Ŭ·¡½º ¹öÀü
ºí·ÏÀ̳ª µµ±¸¿¡ Áö¿ªÀûÀΠŬ·¡½ºÀ̸鼭 ÀÚ½ÅÀÇ À̸§ÀÌ ¾øÀ¸¹Ç·Î ÇØ´ç Ŭ·¡½º¸¦ ¹øÈ£·Î ±¸º°ÇÑ´Ù. Áï Áö¿ª Ŭ·¡½º°¡ ÇϳªÀ̹ǷΠA$1.class ÆÄÀÏÀÌ »ý¼ºµÈ´Ù.

4. static ³»ºÎ Ŭ·¡½º

ÀϹÝÀûÀ¸·Î Ŭ·¡½º´Â staticÀ¸·Î ¼±¾ðÇÒ ¼ö ¾øÁö¸¸ ³»ºÎ Ŭ·¡½º´Â staticÀÌ µÉ ¼ö ÀÖ´Ù.
¾Õ¿¡¼­ ¾ð±ÞÇßµíÀÌ static ³»ºÎ Ŭ·¡½º´Â top level classÀÌ´Ù.
º¸ÅëÀÇ ³»ºÎ Ŭ·¡½º´Â ÀÚ½ÅÀ» Æ÷ÇÔÇÏ°í ÀÖ´Â °´Ã¼¿¡ ´ëÇÑ ÂüÁ¶¸¦ °¡Áö°í ÀÖ¾î Æ÷ÇÔÇÑ °´Ã¼¸¦ Ŭ·¡½º À̸§À» »ç¿ëÇÏ¿© ÂüÁ¶ÇÒ ¼ö ÀÖ´Ù.
Áï, ´ÙÀ½ ¿¹¿¡¼­
class Enclosing {
		int var;

		class Inner { // staticÀÌ ¾Æ´Ñ ³»ºÎ Ŭ·¡½º
				...
		}

		static class StaticInner { // staticÀÎ ³»ºÎ Ŭ·¡½º
				...
		}
}
Inner Ŭ·¡½º´Â Enclosing °´Ã¼ ÀνºÅϽº¸¦ ÂüÁ¶ÇÒ ¼ö ÀÖ°í ¸â¹ö ÇʵåÀÎ varµµ ÂüÁ¶ÇÒ ¼ö ÀÖ´Ù.
Inner Ŭ·¡½º¿¡¼­ Enclosing °´Ã¼ ÀνºÅϽº³ª var Çʵ带 ÂüÁ¶ÇÏ·Á¸é Enclosing.this¿Í Enclosing.this.var¸¦ °¢°¢ ¾²¸é µÈ´Ù.
ÀÌ·¸°Ô ÀϹÝÀûÀÎ ³»ºÎ Ŭ·¡½º´Â Æ÷ÇÔÇÏ°í Àִ Ŭ·¡½ºÀÇ °´Ã¼ ÀνºÅϽº¿¡ ¿¬°áµÇ±â ¶§¹®¿¡
Æ÷ÇÔÇÏ°í Àִ Ŭ·¡½ºÀÇ static ¸Þ½îµå¿¡¼­ »ý¼ºÇÒ ¼ö ¾ø´Ù.
¹Ý¸é, static ³»ºÎ Ŭ·¡½º´Â Æ÷ÇÔÇÏ°í Àִ Ŭ·¡½º¿¡ ¿¬°áµÇ±â ¶§¹®¿¡ Æ÷ÇÔÇϴ Ŭ·¡½ºÀÇ this¿¡ ´ëÇÑ ÂüÁ¶¸¦ °¡Áö°í ÀÖÁö ¾Ê´Ù.
static ³»ºÎ Ŭ·¡½º´Â ´Ù¸¥ Ŭ·¡½º¿¡¼­µµ ´ÙÀ½°ú °°ÀÌ »ç¿ëÇÒ ¼ö ÀÖ´Ù.
		Enclosing.StaticInner obj = new Enclosing.StaticInner();
staticÀÌ ¾Æ´Ñ ÀϹÝÀûÀÎ ³»ºÎ Ŭ·¡½º´Â Æ÷ÇÔÇϴ Ŭ·¡½º ¾È¿¡¼­ ÁÖ·Î »ç¿ëµÉ °ÍÀÌ´Ù.
		new Enclosing().new Inner();

5. Object initializer block

À̸§À» »ý·«ÇÑ Áö¿ª Ŭ·¡½ºÀÇ °æ¿ì »ý¼ºÀÚ¸¦ º°µµ·Î ¼±¾ðÇÒ ¼ö ¾øÀ¸¹Ç·Î ÃʱâÈ­¸¦ ÇÒ ÇÊ¿ä°¡ ÀÖÀ» ¶§ °ï¶õÇØÁø´Ù.
ÀÌ·± °æ¿ì¿¡´Â °´Ã¼ÀÇ ÀνºÅϽº ÃʱâÈ­ ºí·Ï(object initializer block)À» »ç¿ëÇÒ ¼ö ÀÖ´Ù.
ÀÌ ÀνºÅϽº ÃʱâÈ­ ºí·ÏÀº static º¯¼ö¸¦ ÃʱâÈ­½ÃÅ°´Â µ¥ ÁÖ·Î »ç¿ëÇÏ´Â static initializer block°ú ÇüÅ°¡ ¾ÆÁÖ Èí»çÇÏ´Ù. (´Ù¸¸ staticÀÌ ¾ø´Ù.)
´ÙÀ½ ¿¹¿¡¼­
public class InstanceInitializationBlock {
	public static void main(String[] args) {
		Thread t = new Thread() { // Thread Ŭ·¡½º¸¦ »ó¼ÓÇÏ´Â À̸§¾ø´Â Áö¿ª Ŭ·¡½º ¼±¾ð
				 // ÀνºÅϽº ÃʱâÈ­ ºí·Ï
				{
					System.out.println("instance init block");
					setName("SimpleThread-" + System.identityHashCode(this));
				}
				
				public void run() {
					System.out.println("I'm running");
				}
			};

		System.out.println("thread created..");
		t.start();
	}
}
À§ÀÇ ¿¹¿¡¼­ À̸§¾ø´Â Áö¿ªÅ¬·¡½º·Î ¼±¾ðµÈ ¾²·¹µå´Â »ý¼ºµÉ ¶§ ÀνºÅϽº ÃʱâÈ­ ºí·ÏÀ» ¼öÇàÇÑ´Ù. Áï, »ý¼ºÀÚ ¿ªÇÒÀ» ÇÑ´Ù. ÀÌ ¿¹¿¡¼­´Â ¾²·¹µåÀÇ À̸§À» »ý¼ºµÈ °´Ã¼¿¡ °íÀ¯ÇÑ ÇؽÃÄڵ尪À¸·Î ÁöÁ¤ÇÏ´Â ÀÏÀ» ÇÑ´Ù.
À§ÀÇ ¿¹Á¦¸¦ ¼öÇàÇÑ ¿¹´Â ´ÙÀ½°ú °°´Ù.
instance init block
thread created..
I'm SimpleThread-6483656...


Âü°í »çÀÌÆ® : ÀÚ¹Ù ¾ð¾î ¸í¼¼ Áß JDK 1.1¿¡¼­ º¯°æµÈ »çÇ×µé(Changes for Java 1.1)
;-) ³»¿ë º¸°­ ÁßÀÔ´Ï´Ù...
ÀÚ¹Ù - À¥ ÇÁ·Î±×·¡¹ÖÀÇ ÁøÇÑ Ä¿ÇÇÇâ Â÷·Ê
Last modified: Thu Jan 31 21:09:30 2002