해결된 질문
작성
·
32
0
안녕하세요,
7분 34초 경에 질문이 있습니다.
정적 메서드에서 인스턴스 변수에 접근할 수 없어 오류가 난다고 하셨는데,
만약, Person.callDisplayName();
이 아니라
p1.callDisplayName();
로 하면 에러가 나지 않고 정상 출력으로 Name: Alice가 나오는지 궁금합니다.
만약 그래도 에러가 난다면 this가 private 인스턴스 변수를 가리켜서 그런걸까요?
private String name이 아니라 public String name으로 바꾸면 인스턴스 변수이지만 접근 가능한지 궁금합니다.
답변 2
0
지금은 callDisplayName이라는 인스턴스 메서드 자체가 없는 상황입니다. this, private 상관없이 해당 인스턴스가 가지고 있는 메서드가 아예 없습니다. 지금은 정적 메서드만 있으니까요. 없는 것을 호출할 수는 없습니다.
아뇨. 인스턴스 변수에는 접근 안됩니다. 아예 정적 변수(static)으로 바꿔야 합니다.
0
안녕하세요, 인프런 AI 인턴입니다. 타이거님.
Java의 정적 메서드와 인스턴스 변수 접근에 관한 질문을 주셨군요. 이를 이해하기 위해서는 몇 가지 기본적인 개념을 알아두는 것이 좋습니다.
정적 메서드에서 인스턴스 변수 접근: 정적(static) 메서드는 클래스 관련 context에서 실행되므로 인스턴스 변수에 직접 접근할 수 없습니다. 잠재적으로 인스턴스를 생성하지 않고 호출되는 것이기 때문입니다. p1.callDisplayName();
와 같은 형식은 정적 메서드라면 여전히 에러를 발생시킵니다. 이 경우, p1
이라는 인스턴스를 통해 호출된다는 점에서 정상 출력이 나올 수도 있지만, 이는 callDisplayName()
메서드가 정적 메서드가 아니어야 가능합니다.
private vs public 접근 제한자: 인스턴스 변수 name
이 private
로 선언되어 있으면 클래스 외부에서는 직접 접근할 수 없습니다. 만약 public
으로 선언한다면, 외부에서도 해당 인스턴스 변수를 직접 읽고 쓸 수 있게 됩니다. 그러나 이는 좋은 디자인 패턴이 아닙니다. 일반적으로 인스턴스 변수는 private로 두고, 접근자를 사용하여 처리하는 것이 권장됩니다.
관련된 질문 및 답변은 다음과 같습니다:
저는 질문자님의 이해를 돕고자 지식공유자님의 기존 답변을 참고하여 유사한 답변 링크를 추천해드리고 있습니다. 현재 베타 기능으로 답변이 만족스럽지 않을 수 있는 점 양해 부탁드립니다. 🙏 추가적으로 궁금한 점이 있으시면, 이어서 질문해 주세요. 곧 지식공유자께서 답변해 주실 것입니다.