내부 클래스(inner class)

내부클래스는 주로 AWT나 SWING같은 GUI어플리케이션의 이벤트처리에 주로 사용된다.

내부클래스란?

클래스 내부에 선언된 클래스이다. 클래스에 다른 클래스를 선언하는 이유는 두 클래스가 서로 긴밀한 관계에 있기 때문이다.

내부클래스를 사용하게 되면 두 클래스의 멤버들 간에 서로 쉽게 접근할 수 있다. 또 외부에는 불필요한 클래스를 감춤으로써 코드의 복잡성을 줄일 수 있다.

내부클래스는 다른클래스에서는 잘 사용되지 않은

내부 클래스의 종류와 특징

내부 클래스의 종류는 변수의 선언위치에 따른 종류와 같다. 변수를 선언할 때 인스턴스 변수, 클래스 변수(static), 지역변수로 구분되는 듯이 내부클래스도 위치에 따라 구분된다.

내부 클래스의 선언

class Outer{
		class InstanceInner{}
		static class StaticInner{}

		void myMethod(){
				class LocalInner{}
		}
}

각 내부클래스의 선언위치에 따라 같은 선언위치의 변수와 동일한 유효범위, 접근성을 갖는다.

내부 클래스의 제어자와 접근성

내부클래스 중 인스턴스 클래스와 스태틱 클래스는 외부클래스의 멤버변수와 같은 위치에 선언되며, 멤버변수와 같은 성질을 갖는다. 멤버와 같은 규칙이 적용된다.

내부클래스도 abstract, final같은 제어자를 사용할 수 있고, private, protected와 같은 접근제어자 사용이 가능하다.

내부클래스 중 스태틱 클래스만 static멤버를 가질 수 있다. 하지만 다른 클래스에서도 상수(final static)는 정의가능하다.

public class InnerEx1 {
    class InstanceInner{
        int iv = 100;
        //static int cv = 100;
        final static int CONST = 100;
    }
    static class StaticInner{
        int iv = 200;
        static int cv = 200;
    }
    void myMethod(){
        class LocalInner{
            int iv = 300;
            //static int cv = 300;
            final static int CONST = 300;
        }
    }

    public static void main(String[] args) {
        System.out.println(InstanceInner.CONST);
        System.out.println(StaticInner.cv);
    }
}