자바의 정석 - 내부 클래스의 종류, 특징, 선언

Yohan·2024년 1월 29일
0

내부 클래스

  • 클래스 안의 클래스
class A {
	...
}

class B {
	...
}

->

class A { // 외부 클래스
	...
	class B { // 내부 클래스
	...
}
	...
}
  • 내부 클래스의 장점
    -> 내부 클래스에서 외부 클래스의 멤버들을 쉽게 접근할 수 있다.
    (객체 생성 없이 가능하다는 장점!)
    -> 코드의 복잡성을 줄일 수 있다.(캡슐화)

class AAA { // AAA는 BBB의 외부 클래스
    int i = 100;
    BBB b = new BBB();

    class BBB { // BBB는 AAA의 내부 클래스
        void method() {
            // AAA a = new AAA();
            // System.out.println(a.i);
            System.out.println(i); // 내부 클래스이므로 객체 생성없이 외부 클래스의 멤버 접근가능
        }
    }

}

내부 클래스의 종류와 특징

  • 내부 클래스의 종류와 유효범위(scope)는 변수와 동일
class Outer {
	int iv = 0;
    static int cv = 0;
    
    void myMethod() {
    	int lv = 0;
    }
}
class Outer {
	class InstanceInner {}
    static class StaticInner {}
    
    void myMethod() {
    	class LocalInner {}
    }
}
  • 인스턴스 클래스 (instance class) -> iv와 동일
    • 외부 클래스의 멤버변수 선언위치에 선언하며, 외부 클래스의 인스턴스멤버처럼 다루어진다. 주로 외부 클래스의 인스턴스멤버들과 관련된 작업에 사용될 목적으로 선언된다.
  • 스태틱 클래스 (static class) -> cv와 동일
    • 외부 클래스의 멤버변수 선언위치에 선언하며, 외부 클래스의 static멤버처럼 다루어진다. 주로 외부 클래스의 static 멤버, 특히 static 메서드에서 사용될 목적으로 선언된다.
  • 지역 클래스 (local class) -> lv와 동일
    • 외부 클래스의 메서드나 초기화블럭 안에 선언하며, 선언된 영역 내부에서만 사용될 수 있다.
  • 익명 클래스 (anonymous class)
    • 클래스의 선언과 객체의 생성을 동시에 하는 이름없는 클래스(일회용)
profile
백엔드 개발자

0개의 댓글