중첩 클래스

    중첩클래스란(nested)?

  • 클래스 내부에 선언한 클래스를 의미한다.
  • 중첩 클래스를 사용하여 외부에 불필요한 클래스를 감춤으로써 코드의 복잡성을 줄일 수 있다.
  • 내부에 선언되는 위치에 따라 멤버 클래스로컬 클래스 두가지로 분류된다.

 

인스턴스 멤버 클래스

  • static 키워드 없이 중첩 선언된 클래스
  • 인스턴스 필드와 메소드만 선언이 가능하고 정적 필드와 메소드는 선언할 수 없다.
  • 바깥클래스 외부에서 인스턴스 멤버 클래스의 객체를 생성하려면 먼저 바깥 클래스의 객체를 생성하고 다음에 인스턴스 멤버 클래스의 객체를 생성할 수 있다.

② 정적 멤버 클래스

  • static 키워드로 선언된 클래스
  • 바깥클래스 외부에서 정적 멤버 클래스 객체를 생성할 때 바깥클래스 객체를 먼저 생성할 필요 없이 생성이 가능하다.

③ 로컬 클래스

  • 메소드 내에 선언된 클래스이다.
  • 메소드 내부에서만 사용되므로 접근을 제한할 필요가 없기 때문에 접근 제한자 및 static을 붙이지 않는다.
  • 로컬 클래스 내부에는 인스턴스 필드와 메소드만 선언할 수 있고, 정적 필드와 메소드는 선언할 수 없다.
  • 로컬 클래스 메소드가 실행될 때 메소드 내에서 객체를 생성하고 사용해야 한다.

 

중첩 클래스의 접근 제한

① 바깥 필드와 메소드에서 사용 제한

  • 바깥 클래스에서 인스턴스 멤버를 사용할 때 제한이 있다.
  • 인스턴스 멤버 클래스는 바깥 클래스의 인스턴스 필드의 초기값이나 인스턴스 메소드에서 객체를 생성할 수 있으나
  • 정적 필드의 초기값이나 정적 메소드에서는 객체를 생성할 수 없다.
  • 반면 정적 멤버 클래스는 모든 필드의 초기값이나 모든 메소드에서 객체를 생성할 수 있다.

② 멤버 클래스에서 사용 제한

  • 인스턴스 멤버 클래스 안에서는 바깥 클래스의 모든 필드와 모든 메소드에 접근할 수 있지만
  • 정적 멤버 클래스 안에서는 바깥 클래스의 정적 필드와 메소드에만 접근할 수 있고 인스턴스 필드와 메소드에는 접근할 수 없다.

③ 로컬 클래스에서 사용 제한

  • 메소드의 매개 변수나 로컬 변수를 로컬 클래스에서 사용할 때 제한이 있다.
  • 로컬 클래스의 객체는 메소드의 실행이 종료되면 없어지는 것이 일반적 이지만, 로컬 스레드 객체를 사용할 때는 메소드가 종료되어도 계속 실행 상태로 존재할 수 있다.
  • 자바는 이 문제를 해결하기 위해 매개 변수나 로컬 변수를 로컬 클래스에서 사용할 때 final로 자동 선언한다.

④ 중첩 클래스에서 바깥 클래스 참조 얻기

  • 중첩 클래스에서 this키워드를 사용하면 바깥 클래스의 객체 참조가 아니라 중첩 클래스의 객체 참조가 된다.
  • 따라서 중첩 클래스 내부에서 바깥 클래스의 필드와 메소드를 접근하기 위해 다음과 같은 형식을 사용한다.
    • 바깥클래스.this.필드
    • 바깥클래스.this.메소드();

 

중첩 인터페이스

  • 클래스의 멤버로 선언된 인터페이스를 의미한다.
  • 클래스 내부에 선언되어 해당 클래스와 긴밀한 관계를 맺는 구현 클래스를 만드는 역할이다.
  • 인스턴스 멤버 인터페이스와 정적(static) 멤버 인터페이스 모두 가능하다.
  • 주로 정적 멤버 인터페이스를 많이 사용하는데, UI 프로그래밍에서 이벤트를 처리할 목적으로 많이 활용 된다.

 

 

https://programmerbay.com/what-are-inner-class-nested-class-and-static-nested-class-in-java/

 

 

참고자료 : https://butter-shower.tistory.com/86

'Coding > Java' 카테고리의 다른 글

[27] JAVA 기초 복습  (0) 2022.12.14
[26] JAVA 익명 객체 (Anonymous)  (0) 2022.12.10
[24] JAVA 타입 변환과 다형성  (0) 2022.12.06
[23] JAVA 인터페이스  (0) 2022.12.04
[22] JAVA 추상클래스  (0) 2022.12.03

+ Recent posts