자바에서 이너 클래스와 정적 네스티드 클래스의 차이가 무엇인가요?

자바에서 이너 클래스와 정적 네스티드 클래스의 주된 차이가 무엇인가요? 설계와 구현시, 이 들 중 하나를 선택하는 기준은 무엇인가요?

1답변

  • 좋아요

    0

    싫어요
    채택취소하기

    네스티드 클래스는 두 가지 종류로 나눠집니다: static과 non-static. 정적 (static)으로 선언된 네스티드 클래스를 정적 네스티드 클래스라고 부르고요. 비정적 (non-static) 네스티드 클래스를 이너 클래스라고 합니다.

    정적 네스티드 클래스는 인클로징 클래스 이름을 사용해서 접근합니다. 여기서 인클로징 클래스란 네스티드 클래스를 감싸고 있는 클래스를 말합니다.

    OuterClass.StaticNestedClass
    

    예를 들어, 정적 네스티드 클래스의 객체를 생성하는 방법은 아래와 같습니다.

    OuterClass.StaticNestedClass nestedObject = new OuterClass.StaticNestedClass();
    

    이너 클래스의 객체는 인클로징 클래스의 객체 내에 존재합니다. 다음 클래스를 예를 들어 설명하겠습니다.

    class OuterClass {
        ...
        class InnerClass {
            ...
        }
    }
    

    이너 클래스의 객체는 인클로징 객체 안에서만 존재할 수 있습니다. 그래서 인클로징 클래스의 객체가 가지는 필드와 메소드를 직접 접근할 수 있습니다.

    이너 클래스의 객체를 생성하기 위해서는 반드시 인클로징 클래스의 객체를 먼저 생성해야 합니다. 다음은 인클로징 클래스의 객체 안에 이너 클래스의 객체를 생성하는 예입니다.

    OuterClass.InnerClass innerObject = outerObject.new InnerClass();
    

    자바 튜토리얼을 참고하세요: Java Tutorial - Nested Classes

    인클로징 클래스의 객체 없이 이너 클래스의 객체를 만드는 또 다른 방법도 있습니다:

    class A {
      int t() { return 1; }
      static A a =  new A() { int t() { return 2; } };
    }
    

    여기서 new A() {...}는 인클로징 클래스의 객체 없이 static으로 이너 클래스를 정의하는 방법입니다.

ᕕ( ᐛ )ᕗ
로그인이 필요합니다

작성한 답변에 다른 개발자들이 댓글을 작성하거나 댓글에 좋아요/싫어요를 할 수 있기 때문에 계정을 필요로 합니다.