JAVA/Effective Java

클래스와 인터페이스 - 규칙22 멤버 클래스는 가능하면 static으로 선언하라.

반응형

중첩 클래스 (nested class)는 다른 클래스안에 선언된 클래스이다. 

이런 중첩 클래스는 4가지 종류로 구성되어있다.
1. static member class
2. non-static member class
3. anonymous class
4. local class.

2 ~ 4번 클래스는 내부 클래스(inner class)이다.


상황별 중첩 클래스 사용

그럼 위에 출력한 4가지의 중첩 클래스의 적절한 사용 시기를 알아보자.

1. 정적 멤버 클래스 (static member class)
- 정적 멤버 클래스는 바깥 클래스의 모든 멤버에 접근할 수 있다. (private 멤버 변수도 접근 가능)
- 다른 정적 멤버와 동일하게 접근 권한 규칙을 따른다.
- private static member class로 선언할 시 해당 클래스에 접근 가능한 클래스는 바깥 클래스이다.

2. 비 정적 멤버 클래스 (nonstatic member class)
- 비 정적 클래스 객체는 바깥 클래스 객체와 바로 연동이된다.
=> 바깥 클래스의 메소드도 호출 할 수 있으며, this 키워드를 통해 바깥 객체에 대한 참조도 얻을 수 있다. (this  키워드를 사용하여 바깥 클래스를 접근 하기 위해서는 바깥 클래스 이름을 기재하여 사용해야 한다. ClassName.this )
- 정적 클래스와 달리 단독으로 존재 할 수 없다.


위와 같은 이유로
비정적 클래스를 사용할 경우에는 바깥 클래스의 멤버 요소들을 사용하지 않아도 
접근이 가능하기 때문에 시간과 공간 요구량이 늘어난다. ( 이는 garbage collection이 쓰레기 처리하는데 어렵게한다.)

그러므로
바깥 클래스의 내부요소에 접근하지 않을 경우에는 
무조건 정적 클래스로 선언해야 한다.


3. 익명 클래스 (anonymous class)
- 익명 클래스는 사용하는 순간에 선언하고 객체를 만든다.
- 표현식 문법을 준수



반응형