자바 기초

중첩 클래스

YJH3968 2021. 4. 16. 13:49
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