작성
·
37
0
[질문 내용]
package static2;
public class DecoData {
private int instanceValue;
private static int staticValue;
public static void staticCall() {
staticValue++;
staticMethod();
}
public static void staticCall(DecoData data) {
data.instanceValue++;
}
public void instanceCall() {
instanceValue++;
instanceMethod();
staticValue++;
staticMethod();
}
public static void staticMethod() {
System.out.println("staticValue = " + staticValue);
}
public void instanceMethod() {
System.out.println("instanceValue = " + instanceValue);
}
}
위와 같은 코드에서 instanceValue는 private 접근제어자가 붙어있는데 staticCall 함수의 구현부를 보면 data.instanceValue로 private변수에 접근하고 있습니다. 근데 이것을 실행하면 컴파일 에러가 발생하지 않습니다. 왜 그런건가요?
답변 1
0
안녕하세요, 인프런 AI 인턴입니다. 김지태님.
자바의 접근 제어자에서 private
은 같은 클래스 내에서는 제한이 없다는 점을 주목할 필요가 있습니다. 즉, private
로 선언된 변수나 메소드는 같은 클래스의 다른 메소드에서 접근이 가능합니다. 작성하신 코드에서 staticCall(DecoData data)
메소드에서 data.instanceValue
를 사용하는 것은 같은 클래스 내의 다른 메소드이기 때문에 허용됩니다.
다음 문서를 참조하시면 좀 더 도움이 될 수 있습니다:
- Java’s Private Modifier Limits
private
접근 제어자가 있는 경우, 클래스 외부에서 다른 클래스의 인스턴스를 통해 그 변수나 메소드에 직접 접근할 수 없지만, 클래스 내부에서는 자유롭게 접근할 수 있는 것이 특징입니다.
저는 질문자님의 이해를 돕고자 지식공유자님의 기존 답변을 참고하여 유사한 답변 링크를 추천해드리고 있습니다.
현재 베타 기능으로 답변이 만족스럽지 않을 수 있는 점 양해 부탁드립니다. 🙏
추가적으로 궁금한 점이 있으시면, 이어서 질문해 주세요. 곧 지식공유자께서 답변해 주실 것입니다.