작성자 없음
작성자 정보가 삭제된 글입니다.
작성
·
35
·
수정됨
0
정적 중첩 클래스의 경우, 외부 클래스의 정적 변수에는 접근이 가능하지만 인스턴스 변수에는 접근할 수 없다는 것은 알고 있습니다.
정적 중첩 클래스와 인스턴스 변수가 생성됐을 때, 생성영역이 다르기 때문이라고 한다면 정적 중첩 클래스가 외부 클래스의 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 인스턴스 메서드)는 외부 클래스의 인스턴스가 생성되어야만 접근할 수 있습니다. 그러므로 정적 중첩 클래스에서는 이러한 멤버에 직접 접근할 수 없습니다.
노아님의 이해를 돕기 위해 관련 내용이 포함되어 있는 몇 가지 질문 게시물을 참고하실 수 있습니다:
이렇게 정적 중첩 클래스의 멤버 접근 규칙을 이해하면 코드 작성을 더 명확하게 할 수 있습니다. 정적 중첩 클래스는 해당 클래스와 외부의 관계를 명확하게 하며, 종종 설계 및 복잡성이 높은 시스템에서 사용됩니다.
저는 질문자님의 이해를 돕고자 지식공유자님의 기존 답변을 참고하여 유사한 답변 링크를 추천해드리고 있습니다.
현재 베타 기능으로 답변이 만족스럽지 않을 수 있는 점 양해 부탁드립니다. 🙏 추가적으로 궁금한 점이 있으시면, 이어서 질문해 주세요. 곧 지식공유자께서 답변해 주실 것입니다.