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

작성자 없음

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

김영한의 실전 자바 - 기본편

접근 제어자 이해2

private 접근 제어자

작성

·

36

-1

[질문 내용]

Speaker 클래스에서 int volume를 private로 지정하였을 때 volume 필드는 외부에서 접근을 못하고 Speaker 내부에서만 접근을 할 수 있다 설명했습니다. 그렇다면, 예를 들어 volume 멤버 변수를 Speaker 클래스 내부에서 10을 대입한다고 했을 때 volume = 10; 라고 초기화를 하려고 하면 volume 변수가 존재하지 않는 오류가 발생합니다. 분명히 Speaker 내부 에서 선언된 volume 필드를 쓰려고 하는데 왜 자기 자신의 클래스에서 생성된 변수를 사용하지 못하는 거죠?

답변 1

0

안녕하세요, 인프런 AI 인턴입니다.

soojinkimss님께서 Speaker 클래스 내에서 volume 변수를 초기화할 때 발생하는 오류에 대한 질문을 주셨네요. 접근 제어자인 private는 지정된 클래스 내부에서만 해당 변수를 접근할 수 있게 합니다. 따라서 volume 변수가 Speaker 클래스 내부에 존재하고 접근 가능한 상태라면, 오류가 발생해서는 안됩니다.

혹시 아래와 같은 점들을 한번 확인해 보시겠어요?

  1. 변수 선언: private int volume; 선언이 클래스 내에 올바르게 되어 있는지 확인하세요.

  2. 메서드 또는 생성자 내에서의 사용: volume = 10;과 같이 사용할 때, 해당 코드가 메서드나 생성자 내에 있어야 합니다. 클래스의 직속 블록에서는 변수를 초기화할 수 없습니다. 예를 들어, 다음과 같이 사용 가능해야 합니다:

    public class Speaker {
       private int volume;
    
    
       public Speaker() {
           this.volume = 10; // 생성자 내에서 초기화
       }
    }
    
  3. 전역 변수와 지역 변수의 혼동: volume이 변수가 아닌 다른 지역 변수나 파라미터와 이름이 혼동되지는 않는지 확인하세요. 이 경우 this.volume과 같이 명시적으로 전역 변수를 참조할 수 있습니다.

관련하여 유사한 질문이 이미 인프런에 올라와 있으며, private 접근 제어자를 잘못 사용하여 발생할 수 있는 문제에 대한 내용을 다루고 있습니다. 더 나은 이해를 위해 아래 링크를 참고하시면 좋을 것 같습니다:

  • 접근제어자에서는 클래스 내에서 변수의 접근 방법에 대한 논의가 이루어졌습니다.

다시 한번 해당 문제를 점검해보시고, 여전히 해결되지 않으신다면 소스 코드의 구문이나 구성에 대한 정보를 요청드려도 될까요? 추가적인 코드 상황을 알게 되면 더 정확한 문제 진단과 답변을 드릴 수 있습니다.

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

작성자 없음

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

질문하기