Backend/Java

[Java] 중첩클래스

해로몬 2024. 10. 31. 17:04

중첩클래스를 통해 외부 클래스와 연관된 내부클래스를 쉽게 정의, 클래스 간 관계를 명확하게 표현할 수 있습니다.

중첩클래스는 정적(static)중첩 클래스비정적(non-static) 중첩클래스(내부 클래스)로 나뉩니다.

class A{
//멤버 이너클래스
	class B{ ... }          //인스턴스 멤버클래스
    static class C { ... }  //정적 멤버클래스
    
    //지역 이너클래스
    void abc(){
    	class D { ... }     //지역 클래스
    }
}
종류
구현 위치 사용할 수 있는 외부 클래스 변수 생성 방법
인스턴스 내부 클래스 외부 클래스 멤버 변수와 동일 외부 인스턴스 변수,
외부 전역 변수
외부 클래스 인스턴스를 만든 후 생성
정적 내부 클래스 외부 클래스 멤버 변수와 동일 외부 전역 변수 외부 클래스 인스턴스 없이도 생성 가능
지역 내부 클래스 메서드 내부에 구현 외부 인스턴스 변수,
외부 전역변수,
메서드 변수
메서드 호출 시 생성,
메서드 내에서만 사용 가능
익명 내부 클래스 메서드 내부에 구현 외부 인스턴스 변수,
외부 전역 변수
선언과 동시에 생성

 

1.인스턴스 내부 클래스(Instance Inner Class)

  • 외부 클래스의 인스턴스와 함께 생성되는 클래스
  • 외부 클래스의 멤버 변수와 전역 변수에 모두 접근 가능.
  • 외부 클래스의 인스턴스를 생성한 후, 인스턴스 멤버 클래스를 생성해야 하며, 외부 클래스와 밀접하게 연관된 기능을 수행할 때 유용.

2.정적 내부 클래스(Static Nested Class)

  • 외부 클래스의 인스턴스 없이 독립적으로 생성할 수 있는 클래스
  • 외부 클래스의 정적 변수 및 정적 메서드에만 접근할 수 있으며, 외부 클래스의 인스턴스 변수에는 접근 불가능
  • 주로 외부 클래스와 독립적인 기능을 수행할 때 사용

3.지역 내부 클래스(Local Class)

  • 외부 클래스의 메서드 내부에서 정의된 클래스.
  • 메서드가 호출될 때 생성되며, 메서드가 종료되면 더 이상 사용할 수 없음.
  • 해당 메서드의 지역변수와 외부 클래스의 변수에 접근할 수 있음.
  • 메서드 내부에서 특정한 작업을 수행할 때만 사용

4.익명 내부 클래스

  • 이름이 없는 클래스
  • 인터페이스나 추상클래스를 구현하는 즉석 객체를 생성할 때 사용
  • 주로 이벤트 핸드리러와 같이 간단하게 필요한 기능을 1번만 구현할 때 유용
  • new 키워드를 사용하여 선언과 동시에 인스턴스를 생성, 인스턴스는 일회용으로 사용
public interface InterA {
    // 인터페이스 메서드 선언 (추상 메서드)
    void viewInner();
}

 

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

[Java]Enum(열거형)  (2) 2024.10.31
[Java] 커넥션 풀  (0) 2024.10.31
[Java]Java IO(Exception/throw/File/스트림)  (0) 2024.10.24
[Java] Collection  (2) 2024.10.23
[java] System/Data/Calendar/Random/Array 클래스  (0) 2024.10.22