• 카테고리

    질문 & 답변
  • 세부 분야

    프로그래밍 언어

  • 해결 여부

    미해결

접근제어자와 this

24.04.10 05:49 작성 조회수 108

0

public class Ant {

    private int age ;

    public Ant(int age){
        this.age = age ; // this 는 Ant 메서드를 부른 객체의 참조값 인데, x001.age 로 private 접근 제어자에 접근 불가 아닌가 ?
    }

}

this 는 Ant 메서드를 부른 객체의 참조값 이라고 알고 있습니다. 그렇다면 예를 들어 x001.age 와 같이 나타날텐데 private 접근 제어자라 필드 변수에 사실 접근할 수 없지 않나요 ? 생성자에서의 접근은 예외로 인정해주는 건가요 ?

답변 3

·

답변을 작성해보세요.

1

인프런 AI 인턴님의 프로필

인프런 AI 인턴

2024.04.10

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

ghuhan18님께서 질문하신 내용은 this 키워드와 접근 제어자, 특히 private 접근 제어자의 사용과 관련이 있습니다. this 키워드는 현재 객체(인스턴스) 자신을 참조하는 데 사용됩니다. 클래스 내부에서는 해당 클래스의 private 멤버 변수에 접근할 수 있으므로, 생성자 내부에서 this를 이용하여 private 필드에 접근하는 것은 전혀 문제가 되지 않습니다.

private 접근 제어자는 해당 멤버 변수나 메서드를 선언한 클래스 내부에서만 접근할 수 있도록 제한합니다. 따라서, 같은 클래스 내부에 있는 생성자에서는 this 키워드를 통해 private 필드에 접근, 할당, 변경 등의 작업을 수행할 수 있습니다. 외부 클래스나 호출자에 의한 직접적인 접근은 차단되어 있지만, 클래스 내부에서의 접근은 이러한 제한을 받지 않습니다.

해당 내용과 관련하여 유사한 질문과 답변은 다음과 같습니다:

  • “접근제어자 사용 - 필드, 메서드”: 여기에서는 접근 제어자와 관련된 개념적인 부분에 대해 설명하고 있습니다. 특히, 다른 패키지에서의 접근이 어떻게 제한되는지, 그리고 privatepublic 등 접근 제어자의 기본적인 사용 방법에 대해 설명하고 있습니다.

질문이 다루는 핵심은, 클래스의 설계와 이를 통한 캡슐화가 클래스 내부에서의 접근 제어를 어떻게 구현하는지에 대한 이해입니다. this 키워드와 접근 제어자의 조합은 객체 지향 프로그래밍에서 중요한 개념 중 하나로, 클래스 내부에서 자신의 멤버에 접근할 때 사용되는 핵심 메커니즘입니다.

저는 질문자님의 이해를 돕고자 지식공유자님의 기존 답변을 참고하여 유사한 답변 링크를 추천해드리고 있습니다.

현재 베타 기능으로 답변이 만족스럽지 않을 수 있는 점 양해 부탁드립니다. 🙏

추가적으로 궁금한 점이 있으시면, 이어서 질문해 주세요. 곧 지식공유자께서 답변해 주실 것입니다.

0

David님의 프로필

David

2024.04.10

안녕하세요. ghuhan18님, 공식 서포터즈 David입니다.

본 강의 접근 제어자 섹션에서 자세히 설명하고 있사오니 참고해 주세요.

감사합니다.

0

생각하는자님의 프로필

생각하는자

2024.04.10

인프런 ai 인턴의 말 - 첫번째 문단
"ghuhan18님께서 질문하신 내용은 this 키워드와 접근 제어자, 특히 private 접근 제어자의 사용과 관련이 있습니다. this 키워드는 현재 객체(인스턴스) 자신을 참조하는 데 사용됩니다. 클래스 내부에서는 해당 클래스의 private 멤버 변수에 접근할 수 있으므로, 생성자 내부에서 this를 이용하여 private 필드에 접근하는 것은 전혀 문제가 되지 않습니다."
처럼 자신의 클래스 안에서는 접근할수 있어서 이렇게 쓰는 것도 인정이 됩니다. 클래스 밖에서 인자값(정확한 표현인지 모르겠네요.)을 갖고 와서 값을 넣어주고 있습니다.

생성자의 접근 뿐 아니라 set이라고 쓰여진 메서드 를 보시면 클래스 밖에서 인자값을 갖고와서 자기자신 클래스 안에 필드값에 넣어주고 있습니다.
ex)

public class Student {  
  private String name;
  private int age;

  //생성자
  Student(String name) {  //클래스 밖에서 값을 갖고와서 문제없음.
    this.name = name;
  } 

  // set이라는 메서드 
  public void setAge(int age) {
    this.age = age;
  }
}

 

채널톡 아이콘