[자바(Java)] 중첩 클래스 (Nested Class)

방용환·2023년 4월 12일
0
post-thumbnail

1. 중첩 클래스 (Nested Class)

  • 중첩 클래스 (Nested Class) : 클래스 (OuterClass) 내부에 클래스 (InnerClass)를 선언
  • 두개의 클래스가 일접한 관계에 있을 경우 사용
    => 클래스의 캡슐화를 강화할 목적으로 선언

2. 객체 내부클래스 (Instance InnerClass)

  • 객체 내부 클래스 (Instance InnerClass)
    => 컴파일 결과를 [외부클래스$내부클래스.class] 파일로 제공
  • 객체 내부 클래스에서는 static 제한자를 사용하여 필드 또는 메소드 선언 불가능
  • 객체 내부 클래스에서는 객체를 생성하여 외부클래스의 필드 또는 메소드를 접근 제한자에 상관없이 참조 가능
  • 외부클래스에서는 객체 내부 클래스의 필드 또는 메소드에 대한 직접적인 참조 불가능

3. 정적 내부클래스 (Static InnerClass)

  • 정적 내부클래스 (Static InnerClass) : static 제한자를 사용하여 클래스 선언
  • 정적 내부클래스에서는 static 제한자를 사용하여 필드 또는 메소드 선언 가능
  • 정적 내부클래스에서는 외부클래스의 필드 또는 메소드 참조 불가능
  • 외부클래스는 정적 내부클래스로 객체를 생성하여 접근제한자에 상관없이 정적 내부클래스의 필드 또는 메소드 참조 가능
  • 외부클래스에서는 정적 내부클래스를 사용하여 정적필드 또는 정적메소드는 접근 가능

4. 지역클래스 (LocalClass)

  • 지역클래스 (LocalClass) : 메소드내부에 선언된 클래스
  • 메소드가 종료되면 자동 소멸
  • 클래스에 final 또는 abstract 제한자만 사용하여 선언 가능
  • 접근제한자 및 static 제한자를 사용하여 지역클래스를 선언할 경우 에러 발생
  • 비동기식 처리를 위한 스레드 객체를 생성하기 위해 사용

0개의 댓글