강의

멘토링

로드맵

Inflearn brand logo image

인프런 커뮤니티 질문&답변

작성자 없음

작성자 정보가 삭제된 글입니다.

김영한의 실전 자바 - 중급 1편

섹션 8 퀴즈

[정적 중첩 클래스 AI 문제] 복수정답 가능성 문의

작성

·

35

·

수정됨

0

Screenshot 2025-07-14 at 7.03.04 PM.png

정적 중첩 클래스의 경우, 외부 클래스의 정적 변수에는 접근이 가능하지만 인스턴스 변수에는 접근할 수 없다는 것은 알고 있습니다.

정적 중첩 클래스와 인스턴스 변수가 생성됐을 때, 생성영역이 다르기 때문이라고 한다면 정적 중첩 클래스가 외부 클래스의 public 인스턴스 메서드에도 접근할 수 없는 것이 맞는 건가요?

아래와 같이 코드를 작성해보니 static context에서 non-static method를 참조할 수 없다는 오류가 뜹니다.

public class NestedOuter {

    private static int outClassValue = 3;
    private int outInstanceValue = 2; // 인스턴스 영역에 생성되는 변수 (heap 영역)
    public void outerPrint() {
        System.out.println("Can Nested class access this method?");
    }

    // 정적 중첩 클래스
    // static은 클래스 수준(static)으로 존재
    static class Nested {
        private int nestedInstanceValue = 1;

        public void print() {
            // 자신의 멤버 접근
            System.out.println(nestedInstanceValue);

            // 바깥 클래스 인스턴스 멤버에는 접근할 수 없다.
            // nested static class는 outer class의 인스턴스와 독립적으로 존재하기 때문에, 인스턴스 변수에는 접근할 수 없다
            // System.out.println(outInstanceValue);

            // 바깥 클래스의 클래스 멤버에는 접근 가능. private이어도 Nested 클래스가 NestedOuter 클래스 내부에 존재하기 때문에 접근 가능.
            // System.out.println(NestedOuter.outClassValue); // 가능
            System.out.println(outClassValue);

            System.out.println(outerPrint());
        }
    }
}

정답은 C, D 두 가지인 것으로 생각하면 될까요?

답변 1

0

안녕하세요, 인프런 AI 인턴입니다. 노아님께서 질문하신 정적 중첩 클래스와 외부 클래스의 멤버 접근에 관한 부분을 설명드리겠습니다.

정적 중첩 클래스는 외부 클래스의 인스턴스와 독립적으로 존재하므로, 외부 클래스의 인스턴스 변수인스턴스 메서드에 직접 접근할 수 없습니다. 따라서, 정적 중첩 클래스는 외부 클래스의 인스턴스가 필요 없는 정적 변수 및 정적 메서드에는 접근이 가능합니다.

  • 정적 변수, 정적 메서드에 대한 접근: 정적(Static)으로 선언된 멤버는 클래스로부터 독립적으로 사용될 수 있으며, 이는 정적 중첩 클래스에서도 마찬가지입니다. 따라서 외부 클래스의 정적 변수 및 메서드는 직접 접근할 수 있습니다.

  • 인스턴스 변수, 인스턴스 메서드에 대한 접근: 인스턴스 변수와 인스턴스 메서드(예: public 인스턴스 메서드)는 외부 클래스의 인스턴스가 생성되어야만 접근할 수 있습니다. 그러므로 정적 중첩 클래스에서는 이러한 멤버에 직접 접근할 수 없습니다.

노아님의 이해를 돕기 위해 관련 내용이 포함되어 있는 몇 가지 질문 게시물을 참고하실 수 있습니다:

  1. “정적 중첩 클래스, 정적 변수에 대한 질문” - 정적 중첩 클래스와 정적 멤버에 관한 다른 학습자와의 문답.
  2. “중첩 클래스 및 내부 클래스 코드 질문.” - 실제 사용 사례와 코드에 대한 학습자와의 문답.

이렇게 정적 중첩 클래스의 멤버 접근 규칙을 이해하면 코드 작성을 더 명확하게 할 수 있습니다. 정적 중첩 클래스는 해당 클래스와 외부의 관계를 명확하게 하며, 종종 설계 및 복잡성이 높은 시스템에서 사용됩니다.

저는 질문자님의 이해를 돕고자 지식공유자님의 기존 답변을 참고하여 유사한 답변 링크를 추천해드리고 있습니다.
현재 베타 기능으로 답변이 만족스럽지 않을 수 있는 점 양해 부탁드립니다. 🙏 추가적으로 궁금한 점이 있으시면, 이어서 질문해 주세요. 곧 지식공유자께서 답변해 주실 것입니다.

작성자 없음

작성자 정보가 삭제된 글입니다.

질문하기