티스토리 뷰

donaricano-btn
반응형

내부 클래스에 static이 권장되는 이유는 크게 두 가지이다. 첫째, static으로 선언되지 않은 내부 클래스는 외부 클래스에 대한 숨은 참조를 저장해야 하기 때문에 이를 위한 시간/공간적 복잡도가 증가해 성능이 떨어진다. 둘째, 내부 클래스가 외부 클래스에 대한 숨은 외부 참조를 갖기 때문에 가비지 컬렉션이 제대로 이루어 지지 않아 메모리 누수가 발생할 수 있다. 이러한 이유로 내부 클래스에서 외부 클래스의 인스턴스 변수에 접근하지 않는 경우 static으로 내부 클래스를 선언하는 것이 좋다. 이 때, static으로 선언된 내부 클래스는 외부 클래스에 대한 숨은 외부 참조를 갖지 않는다.

 

숨은 외부 참조를 가진다는 의미는 다음 코드를 보면 쉽게 이해할 수 있다.

public class OuterClass {

    static int staticVariable = 0;
    int nonStaticVariable = 0;

    public static class StaticInnerClass {
        void accessStaticVariable() {
            OuterClass.staticVariable += 1; // 외부 클래스 변수에 접근 가능
        }
        void accessNonStaticVariable() {
            OuterClass.this.nonStaticVariable += 1; // 컴파일 오류
        }
    }

    public class NonStaticInnerClass {
        void accessStaticVariable() {
            OuterClass.staticVariable += 1; // 외부 클래스 변수에 접근 가능
        }
        void accessNonStaticVariable() {
            OuterClass.this.nonStaticVariable += 1; // 외부 클래스 변수에 접근 가능
        }
    }
}
반응형
donaricano-btn
댓글
반응형
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/05   »
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 31
글 보관함