자바
자바 중첩 클래스의 접근 제한
cdbitmana
2020. 10. 27. 19:58
바깥 필드와 메소드에서 사용 제한
인스턴스 멤버 클래스는 바깥 클래스에서 객체를 생성할 수 있으나, 정적 필드나 정적 메소드에서는 객체를 생성할 수 없다.
public class A { // 바깥 클래스 A
class B { // 내부 클래스 B
}
B field1 = new B ( ); // B클래스의 바깥에서 B객체 생성 가능
void method1( ) { // B클래스의 바깥에서 메소드로 B객체 생성 가능
B var1 = new B( );
}
static field2 = new B ( ); // 정적 필드에서는 B객체 생성 불가능
static void method2( ) { // 정적 메소드에서는 B객체 생성 불가능
B var2 = new B( );
}
}
멤버 클래스에서 사용 제한
멤버 클래스가 인스턴스냐 정적이냐에 따라 바깥 클래스의 필드와 메소드에 접근할 때 제한이 생긴다.
인스턴스 멤버 클래스는 바깥 클래스의 모든 필드와 메소드에 접근할 수 있다.
정적 멤버 클래스는 바깥 클래스의 정적 필드와 정적 메소드에만 접근할 수 있다.
로컬 클래스에서 사용 제한
로컬 클래스의 객체는 메소드 실행이 종료되면 없어지는 것이 일반적이지만, 로컬 스레드 객체를 사용할 때 메소드가 종료되어도 계속 실행 상태로 존재할 수 있다.
자바는 이 문제를 해결하기 위해 로컬 클래스에서 사용하는 매개 변수나 로컬 변수의 값을 로컬 클래스 내부에 복사해두고 사용한다. 그리고 매개 변수나 로컬 변수가 수정되어 값이 변경되면 로컬 클래스에 복사해둔 값과 달라지므로 문제를 해결하기 위해 매개 변수나 로컬 변수를 final로 선언할 것을 요구한다.