728x90
1. 일반 중첩 클래스
- 중첩 클래스란 클래스 내부의 멤버로서 클래스를 선언한 것이다.
- 일반적인 중첩 클래스의 객체는 다음과 같은 방법으로 생성한다.
Outer 객체1 = new Outer();
Outer.Inner 객체2 = 객체1.new Inner();
- Outer 클래스의 static method에서는 일반 중첩 클래스의 객체를 선언할 수 없다. 일반 중첩 클래스의 객체를 선언하려면 Outer 클래스의 객체를 선언해야 하기 때문이다. static이 아닌 필드나 method를 클래스의 객체 선언없이 사용할 수 없는 것과 같다.
- 일반 중첩 클래스인 Inner 클래스 내부에 static과 관련된 멤버를 선언하는 것도 안 된다.
2. 정적 중첩 클래스
- 정적 중첩 클래스는 중첩 클래스에 static 예약어를 붙인 것으로 Outer 클래스의 객체를 생성하지 않고 직접 Inner 클래스에 접근해서 객체를 생성할 수 있다.
- 정적 중첩 클래스의 객체는 다음과 같은 방법으로 생성한다.
Outer.Inner 객체 = new Outer.Inner();
- static 필드, method를 정의해서 사용할 수 있다. 즉, Inner 클래스 내부에서 static 멤버를 선언하여 사용하고 싶은 경우 정적 중첩 클래스를 사용해야 한다.
3. 지역 중첩 클래스
- 하나의 method 내부에서만 사용하기 위해 만드는 클래스이다.
- 잘 사용하지 않지만 method 내부가 비대하거나 method 내부에서 재활용을 해야 하는 경우에 한해 사용한다.
- 지역 중첩 클래스는 final을 제외한 어떤 예약어도 사용할 수 없다. 이 때문에 클래스 내부에 static 멤버도 정의할 수 없다.
4. 익명 중첩 클래스
- 지역 중첩 클래스의 변형된 형태로 제약이 있는 상속의 한 형태다. 특정 클래스에 대한 객체를 만들면서 뒤에 추가적으로 필드나 method를 추가해 기존 클래스와 다른 클래스를 만들 수 있다.
- class 예약어와 클래스 이름이 없고, 클래스의 내용부를 재정의하면서 객체를 생성할 수 있다. 다만 익명 중첩 클래스를 만들기 위해서는 대상 클래스가 이미 선언되어 있어야 한다.
- 이미 선언되어 있는 클래스에 없는 멤버를 추가 작성하는 것은 가능하지만 그 멤버는 중첩 클래스 내부에서만 사용 가능하다.
- 익명 중첩 클래스 내부에 다른 생성자를 작성할 수 없다. 익명 중첩 클래스 자체가 이미 생성자를 사용해서 객체를 생성한 상태이기 때문이다.
- 익명 중첩 클래스에서 일반 변수를 사용할 수는 있지만 값을 변경할 수는 없다. 즉, 상수 변수만 사용 가능하다.
출처 : 헬로 자바 프로그래밍(2016)
728x90
'자바 기초' 카테고리의 다른 글
제네릭 (0) | 2021.04.18 |
---|---|
자바 멀티 스레드 (0) | 2021.04.17 |
예외 처리와 어설션 (0) | 2021.04.16 |
추상 클래스와 인터페이스 (0) | 2021.04.16 |
상속성과 다형성 (0) | 2021.04.16 |