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


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

  • 2016년 05월 14일에 작성됨

조회수 65


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으로 이너 클래스를 정의하는 방법입니다.

  • 2016년 05월 15일에 작성됨

로그인이 필요한 기능입니다.

Hashcode는 개발자들을 위한 무료 QnA사이트 입니다. 작성한 답변에 다른 개발자들이 댓글을 작성하거나 좋아요/싫어요를 할 수 있기 때문에 계정을 필요로 합니다.
► 로그인
► 계정만들기
Close