inflearn logo
강의

강의

N
챌린지

챌린지

멘토링

멘토링

N
클립

클립

로드맵

로드맵

지식공유

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

접근제어자와 this

185

ghuhan18

작성한 질문수 121

0

public class Ant {

    private int age ;

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

}

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

java 객체지향

답변 3

1

인프런 AI 인턴

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

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

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

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

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

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

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

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

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

0

David

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

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

감사합니다.

0

생각하는자

인프런 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;
  }
}

 

질문있습니다

0

28

1

1번 문제 질문입니다.

0

33

1

음악플레이어 문제 중 코드질문

0

27

1

9장 상속 문제와 풀이 질문

0

38

1

강의 자료에 사소한 오타가 있습니다.

0

50

2

매서드 참조값 반환??

0

66

1

접근제어자 - 쇼핑카트 문제에서 상품출력 부분 메서드

0

70

1

자바 기본편 - .(dot)에 관한 질문입니다!

0

85

1

공부방법

0

76

2

상속관계에서 멤버 변수는 오버라이딩 되는 개념이 아닌가요?

0

82

1

static method 질문

0

66

1

캡슐화 문제풀이 ShoppingCart 요구사항에 문제가 있어보입니다. 피드백 주세요

0

97

1

Method1에서 Student 객체

0

74

1

3강 18. null 질문

0

69

1

this 와 super의 호출 순서는 부모-자식관계 떄문만인가요?

0

76

1

팩토리 메서드 패턴과 일반 생성자 사용의 장단점

0

97

1

문의

0

104

1

9장 상속 문제와 풀이 부분 궁금한게 있어서 질문드립니다

0

90

1

상속과 그에 따른 메모리 구조 질문

0

62

1

call메소드에서 멤버에 접근하는 방식을 이해 못 했습니다

0

74

1

수강기한

0

136

1

기본편 객체지향 프로그래밍에 대한 정의

0

87

1

섹션10 상속 메모리 구조 및 문제 관련 질문

0

87

1

추가 지식 학습

0

153

2