중첩 클래스 (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)
- 익명 클래스는 사용하는 순간에 선언하고 객체를 만든다.
- 표현식 문법을 준수
'JAVA > Effective Java' 카테고리의 다른 글
제네릭 - 규칙 24 무점검 경고를 제거하라 (0) | 2018.05.29 |
---|---|
제네릭 - 규칙 23 새 코드에는 무인자 제네릭 자료형을 사용하지 마라 (0) | 2018.05.29 |
클래스와 인터페이스 - 규칙 21 전략을 표현하고 싶을 때는 함수 객체를 사용하라. (0) | 2018.05.29 |
클래스와 인터페이스 - 규칙 20 태그 달린 클래스 대신 클래스 계층을 사용하라. (0) | 2018.05.29 |
클래스와 인터페이스 - 규칙 19 인터페이스는 자료형을 정의할 때만 사용하라. (0) | 2018.05.29 |