LANGUAGE/Java

내부클래스(inner class)

Doraemon_lulu 2023. 11. 15. 18:49

내부클래스(inner class)

  • 정의
    - 클래스 안의 클래스
    - 객체 생성 없이 내부 클래스에서 외부 클래스의 멤버에 접근할 수 있음.

  • 내부 클래스의 장점
    - 내부 클래스에서 외부 클래스의 멤버들에 쉽게 접근할 수 있음. 
    - 코드의 복잡성을 줄일 수 있음. (캡슐화)

  • 내부 클래스의 종류 및 특징 
    - 내부 클래스의 종류와 유효범위(scope)는 변수와 동일함.
    - 인스턴스(instance) 내부 클래스, 스태틱(static) 내부 클래스, 지역(local) 내부 클래스, 익명(anonymous) 내부 클래스
class Outer {
	
    private class InstanceInner {} // 인스턴스 내부 클래스 
    protected static class StaticInner {} // 스태틱 내부 클래스  
    
    void myMethod() {
    	class LocalInner {} // 지역 내부 클래스
        
    }
}

 

  • 내부 클래스의 제어자와 접근성
    - 내부 클래스의 제어자는 변수에 사용 가능한 제어자와 동일함. 
    - private, protected, public, (default)
    - 인스턴스 멤버는 인스턴스 멤버에 직접 접근 가능함.
    - 스태틱 멤버는 스태틱 멤버에 직접 접근 가능함.
    - 스태틱 멤버는 인스턴스 멤버에 직접 접근 불가능함. (객체 생성 후 접근 가능)
    - 내부 클래스에서 외부 클래스의 private 변수에 직접 접근 가능함. 
    - 내부 클래스에서 외부 클래스의 final이 붙은 변수(상수)에만 직접 접근 가능함. 
    - 참고로 JDK 1.8 부터는 지역변수의 경우에 값이 바뀌지 않았다면, 해당 지역변수는 상수로 간주됨.
       → 하지만, 혼선을 야기할 수 있기 때문에 final 붙여서 상수임을 표현하는 것을 권장함.