old/Java

중첩 클래스와 중첩 인터페이스 (nested)

물 개 2020. 11. 15. 17:58

중첩 클래스란?

클래스 내부에 선언한 클래스.

여러 클래스와 관계를 맺지 않고 특정 클래스와만 관계를 맺을 경우, 관계 클래스를 특정 클래스 내부에 선언하는 것이 좋다.

 

장점

1. 두 클래스의 멤버들은 서로 쉽게 접근할 수 있다.

2. 외부에 불필요한 관계 클래스를 감춤으로써 코드의 복잡성을 줄일 수 있다.

 

종류

멤버 클래스 : 클래스의 멤버로서 선언된 중첩 클래스. 클래스나 객체가 사용중이라면 언제든지 재사용 가능.

 - 인스턴스 멤버 클래스 : A 객체를 생성해야만 사용할 수 있는 B 중첩 클래스.

                                 내부에 인스턴스 필드와 메소드만 선언하고 객체 생성 가능. static 멤버 안 됨.

                                 outter 클래스의 모든 필드와 메소드를 사용할 수 있다.

 - 정적 멤버 클래스 : A 클래스로 바로 접근할 수 있는 B 중첩 클래스. 잘 사용하지 않음.

                            모든 필드와 메소드를 선언하고 객체 생성 가능.

                            outter 클래스의 정적 필드와 정적 메소드만 사용할 수 있다.

 

로컬 클래스 : 메소드 내부에서 선언된 중첩 클래스. 메소드 실행 시에만 사용되고, 메소드 종료되면 소멸.

                  접근 제한자 및 static 을 붙일 수 없다. 메소드 내부에서만 사용되기 때문에 접근 제한 할 필요가 없어서.

                  주로 비동기 처리를 위해 스레드 객체를 만들 때 사용한다.

                  outter 클래스의 필드, 메소드 제한 없이 사용 가능.

                  단 매개변수와 로컬 변수는 final로 선언된 매개 변수와 로컬 변수만 사용 가능. final로 선언 안돼있어도 final 특성을 가짐.

//인스턴스 멤버 클래스
class A {
    class B { }
}

//정적 멤버 클래스
class A {
	static class B { }
}

//로컬 클래스
class A {
	void method() {
    	class B { }
    }
}

 

중첩 인터페이스란?

클래스 내부에 선언한 인터페이스.

해당 클래스와 긴밀한 관계를 맺는 구현 클래스를 만들기 위해 사용.