Programing Language/Java

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

vinedpillar 2022. 7. 8. 01:18

중첩 클래스(Nested Class)

  • 중첩 클래스는 클래스 내부에 선언되는 클래스를 똣합니다.

  • 객체의 관계가 종속적인 관계이거나 특정 객체와만 상호 작용을 할 때 내부 클래스를 사용하여 표현합니다.

  • 중첩 클래스는 내부 클래스(Inner Class) 라고도 불리는데, 혼용되는 경우도 있지만 엄격하게 분리하여 사용하는 경우도 있습니다.
    • 내부 클래스(= 인스턴스 멤버 클래스): 바깥 클래스에서 멤버 변수처럼 사용되는 클래스
    • 중첩 클래스(= 스태틱 멤버 클래스): 정적(static)으로 선언되어 바깥 클래스와 독립적으로 사용할 수 있는 클래스
    • 지역 클래스: 메서드 내에 선언되는 클래스로 메서드가 실행될 때만 사용할 수 있는 클래스

  • 내부 클래스도 하나의 클래스이기 때문에 컴파일시 바이트코드 파일(.class)이 생성됩니다.

  • 컴파일 시 생성되는 바이트코드 파일의 이름은 아래와 같이 생성됩니다.
    • 내부 클래스, 중첩 클래스일 경우: 바깥클래스이름 $ 중첩클래스이름 .class
    • 로컬 클래스일 경우: 바깥클래스이름 $1 중첩클래스이름 .class

 

 

 

중첩 클래스의 분류

  • 내부 클래스는 선언 방식과 위치에 따라서 아래와 같이 구분됩니다.
    • 인스턴스 멤버 클래스(내부 클래스): 특정 클래스의 멤버로 선언된 클래스를 뜻합니다.
    • 스태틱 멤버 클래스(중첩 클래스): 특정 클래스의 정적 멤버로 선언된 클래스를 뜻합니다.
    • 로컬 클래스(지역 클래스): 특정 클래스의 메서드 내에 선언된 클래스를 뜻합니다.
인스턴스 멤버 클래스 선언 방법

접근제어자 class 클래스이름 {
    접근제어자 class 내부클래스이름 {    	
        클래스 요소 ... 
    }
    
    ...
    
}
스태틱 멤버 클래스 선언 방법

접근제어자 class 클래스이름 {
    접근제어자 static class 중첩클래스이름 {
    	클래스 요소 ...
    }

	...

}
로컬 클래스 선언 방법

접근제어자 class 클래스이름 {
    // 생성자
    접근제어자 클래스이름(매개변수) {
    	class 로컬클래스이름 {
        	클래스 요소 ...
        }
    }
    
    // 메서드
    접근제어자 리턴타입 메서드이름(매개변수) {
    	class 로컬클래스이름 {
        	클래스 요소 ...
        }
    }

	...
    
}