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

core12님의 프로필 이미지
core12

작성한 질문수

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

접근 제어자 사용 - 클래스 레벨

접근 제어자 관련 질문드립니다.

작성

·

146

·

수정됨

0

[질문 템플릿]
1. 강의 내용과 관련된 질문인가요? (예)
2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예)
3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예)

[질문 내용]

안녕하세요, 접근제어자 관련 질문드립니다.

1)

AccessData와 AccessInnerMain 내용에서,

외부인 AccessInnerMain에서 AccessData의 innerAccess()가 호출 될 수 있는 것은 public이기 때문입니다.

내부 호출인 inneerAccess()의 내용이 표시될 수 있는 것은 innerAccess()의 필드가 private int privateField라 하여도 public이기 때문에 가능한 것인가요?

또한 강의 자료 중 , innerAccess()메서드는 자신의 private 필드와 메서드에 모두 접근 할 수 있다고 되어 있는데, 여기서 private 필드와 메서드가 무엇을 의미하는 것인지 정확히 모르겠습니다. private int privateField와 privateMethod를 의미하는 것일까요? 아니면 innerAccess()메서드는 자신의 필드가 없고 지역변수가 있는 것인가요?

추가적으로, 아래 코드의 경우,

public void innerAccess(){
System.out.println("내부 호출");
publicField = 100;
defaultField = 200;
privateField = 300;
publicMethod();
defaultMethod();
privateMethod();
}

privateField, publicField나 defaultField를 innerAccess의 지역변수라 말해야 할지, AccessData 클래스의 필드라 할지 잘 모르겠습니다.

2) AccessOuterMain에서

import access.a.AccessData;를 해주어도 defaultField,defaultMethod나 privateField,privateMethod가 실행이 안되는 것은 private, default 접근 제어자 그 자체의 정의에 의해서 안되는 것인가요?

이 사례에서 import는 AccessData클래스와 access.a 패키지에 접근하게 해주지만, 관련 클래스 및 패키지의 필드와 메서드가 private이나 default로 되어 있는 이상 접근하지 못하는 것으로 이해하였는데, 맞는지 확인 부탁드립니다.

답변 2

0

김영한님의 프로필 이미지
김영한
지식공유자

안녕하세요. core12님

질문1

innerAcces() 메서드는 AccessData에 소속된 메서드 입니다. 따라서 AccessData의 private에 접근할 수 있습니다. 쉽게 이야기해서 자기 자신에 접근하는 것입니다.

질문2

import와 접근제어자는 무관합니다. import를 사용하는 것은 외부 패키지에 있는 클래스를 사용하는 목적입니다. 접근제어자는 이런 import와는 무관하게 사용됩니다.

감사합니다.

0

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

core12님의 질문은 접근 제어자에 대한 이해와 각 접근 제어자의 범위를 명확하게 파악하는 데 중점을 두고 있습니다.

  1. innerAccess() 메서드가 자신이 속한 클래스(AccessData) 내의 private 필드와 메서드에 접근할 수 있는 것은 Java의 접근 제어자 규칙에 따른 것입니다. 클래스 내부의 메서드는 그 클래스의 모든 필드(변수)와 다른 메서드에 접근할 수 있으며, 이는 접근 제어자(private, default, protected, public)와 관계없이 적용됩니다. 따라서 private int privateFieldprivateMethod()innerAccess()에서 접근할 수 있다고 말하는 것은 정확합니다.

  2. AccessOuterMain에서 AccessData 클래스를 import해도, defaultprivate 접근 제어자로 선언된 필드와 메서드에 접근할 수 없는 것은 맞습니다. default 접근 제어자는 같은 패키지 내에서만 접근을 허용하며, private 접근 제어자는 해당 필드나 메서드를 선언한 클래스 내부에서만 접근을 허용합니다. import 구문은 해당 클래스를 사용할 수 있게 해주지만, 접근 제어자의 규칙을 변경하지는 않습니다.

질문하신 내용을 더 명확하게 이해하기 위해서는 아래 링크의 질문과 답변도 참고하시면 도움이 될 것입니다:

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

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

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

core12님의 프로필 이미지
core12

작성한 질문수

질문하기