BACK/JAVA

[JAVA] 이너 클래스(인스턴스, 정적, 지역)

연듀 2022. 7. 28. 20:23

 

 

인스턴스 멤버 이너 클래스

 

객체 내부에 멤버의 형태로 존재

아우터 클래스의 모든 접근 지정자의 멤버에 접근할 수 있음

 

 

객체 생성 

class A {
    class B{
    }
}
A a = new A();
A.B b = a.new B();

 

 

이너 클래스 내부에서 아우터 클래스의 멤버를 참조

-> '아우터 클래스명.this'

 

 

 

 

 

 

정적 멤버 이너 클래스

 

이너 클래스 앞에 static 키워드가 포함

아우터 클래스의 멤버중 객체 생성 없이 바로 사용할 수 있는 정적 멤버만 정적 이너 클래스 내부에서 사용할 수 있음

 

 

객체 생성

class A{
    static class B{
        
    }
}

A.B b = new A.B();

 

 

 

 

지역 이너 클래스

 

클래스의 멤버가 아닌 메서드 내에서 정의되는 클래스

정적 클래스로 지정할 수 없음 

 

 

객체 생성

class A{
    void abc(){
        class B{ // 지역 이너 클래스
        }
        B b = new B(); // 지역 이너 클래스 객체 생성
    }
}

 

자신이 정의된 메서드의 지역 변수를 클래스 내부에서 사용하려면 반드시 해당 지역 변수가 final로 선언되어야한다.

final로 선언되어있지 않다면 컴파일러가 강제로 해당 지역 변수에 final을 추가해 준다.

 

지역 이너 클래스는 클래스가 정의된 메서드 내부에서만 객체를 생성할 수 있다.