Notice
Recent Posts
Recent Comments
«   2024/11   »
1 2
3 4 5 6 7 8 9
10 11 12 13 14 15 16
17 18 19 20 21 22 23
24 25 26 27 28 29 30
Archives
Today
Total
관리 메뉴

충분히 쌓여가는

내부 클래스(inner class) 본문

Java/JAVA2

내부 클래스(inner class)

빌드이너프 2023. 6. 17. 21:50

내부 클래스(inner class)

클래스 안의 클래스

class A { // B클래스의 외부 클래스
    ...
    class B { // A클래스의 내부 클래스
        ...
    }
    ...
}

 

내부 클래스의 장점

내부 클래스에서 외부 클래스의 멤버들을 쉽게 접근할 수 있다

B 클래스와 A 클래스가 각각 존재: B 클래스에서 A 클래스의 멤버 호출 시 객체를 생성해야한다

B 클래스가 A 클래스의 내부 클래스 일 때: B 클래스에서 A 클래스의 멤버 호출 시 객체를 생성하지 않아도된다

 

코드의 복잡성을 줄일 수 있다(캡슐화)

B 클래스가 A 클래스 안에서만 사용될 경우 굳이 A 클래스 밖에 B 클래스가 존재할 이유가 없다

(B 클래스가 A 클래스 밖에 존재할 경우 다른 클래스가 B 클래스를 사용할 수도 있다[그런데 사용할 수도 있긴 함]

 

 

내부 클래스의 종류와 유효범위(scope)는 변수와 동일하다

내부 클래스 특징
instane class 외부 클래스의 멤버변수 선언위치에 선언
외부 클래스의 instance 멤버처럼 다루어진다
주로 외부 클래스의 instance 멤버들과 관련된 작업에 사용될 목적으로 선언된다
static class 외부 클래스의 멤버변수 선언위치에 선언
외부 클래스의 static 멤버처럼 다루어진다
주로 외부 클래스의 static 멤버, 특히 static 메서드에서 사용될 목적으로 선언된다
local class 외부 클래스의 메서드나 초기화 블럭 안에 선언하며, 선언된 영역 내부에서만 사용될 수 있다
anonymous class
(익명 클래스)
클래스의 선언과 객체의 선언을 동시에 하는 이름없는 클래스(일회용)

내부클래스 미사용

class AAA {
    int i = 1000;
    BBB b = new BBB();
}

class BBB {
    void method() {
        AAA a = new AAA();
        System.out.println(a.i);
    }
}

class CCC {
    BBB b = new BBB();
}

public class InnerTest {
    public static void main(String[] args) {
        BBB b = new BBB();
        b.method();
    }
}

1000

 

내부 클래스 사용

BBB 클래스는 AAA의 클래스의 내부 클래스

BBB 클래스의 메서드를 사용하기 위해 AAA 클래스의 객체를 생성해야한다

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

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

//class CCC {
//    BBB b = new BBB(); // 에러
//}

public class InnerTest {
    public static void main(String[] args) {
        AAA a = new AAA();
        a.b.method();
    }
}

1000