본문 바로가기

프로그래밍언어/Java

[Java 중급] 내부 클래스

내부 클래스


내부 클래스는 바깥 클래스의 인스턴스를 이루는 요소가 된다. 즉, 바깥 클래스의 인스턴스에 소속된다. 

 

public class InnerOuter {
    
    private static int outClassValue = 3;
    private int outInstanceValue = 2;
    
    class Inner {
        private int innerInstanceValue = 1;
        
        public void print() {
            // 자기 자신의 인스턴스 변수에 접근
            System.out.println(innerInstanceValue);
            
            // 외부 클래스의 인스턴스 멤버에 접근 가능, private 접근 가능
            System.out.println(outInstanceValue);
            
            // 외부 클래스의 클래스 멤버에 접근 가능, private 접근 가능
            System.out.println(outClassValue);
        }
    }
}

=> 바깥 클래스의 인스턴스, 클래스 멤버에 접근이 가능하다. 접근 제어자가 private 이라도 가능하다. 외부 클래스에 소속되기 때문이다. 

 

Main.java

public class InnerOuterMain {

    public static void main(String[] args) {
        InnerOuter outer = new InnerOuter();
        InnerOuter.Inner inner = outer.new Inner();

        inner.print();
        System.out.println("innerClass =" + inner.getClass());

    }
}

=> 내부 클래스는 바깥 클래스의 인스턴스 정보를 알아야 생성할 수 있다. 

객체 생성 방법이 특이하므로 주의하자. new 바깥클래스의 인스턴스 참조.내부클래스() 로 생성할 수 있다.

 

실행결과

 

=> 실제로 내부 인스턴스가 바깥 인스턴스에 생성되는 것은 아니다. 내부 인스턴스는 바깥 인스턴스의 참조를 보관한다. 이 참조를 통해 바깥 인스턴스의 멤버에 접근할 수 있는 것이다. 

 

 

 

* 인프런 '김영한의 실전 자바 - 중급 1편'을 참고하여 작성하였습니다.