본문 바로가기
back-end/JAVA

29) 접근제어자(access modifier): private, default, protected, public

by 모두의 향연 2021. 6. 7.
728x90
반응형

29) 접근제어자(access modifier): private, default, protected, public

 

1. 접근제어자의 종류

private: 같은 클래스 내에서만 접근이 가능하다.

(default): 같은 패키지 내에서만 접근이 가능하다.

protected: 같은 패키지 내에서, 그리고 다른 패키지의 자손클래스에서 접근이 가능하다.

public: 접근 제한이 전혀 없다.

 

하나의 대상에 4개 중에 1개만 사용가능하다.

제어자 같은 클래스 같은 패키지 자손클래스  전체
public O O O O
protected O O O  
(default) O O    
private O      

public> protected>(default)>private순으로 접근 범위가 작아진다.

 

 

2. 접근제어자 주의사항

-public과 (default)만 클래스 앞에 붙일 수 있다.

-public, protected, (default), private 모두 멤버에 사용 가능하다.

접근제어자 사용예시

 

ParentTest클래스에서 Parent의 멤버인 prv를 쓰면 에러가 난다.

prv는 같은 클래스 내에서만 사용 가능하므로 에러가 나는 것이다.

그림으로 나타내면 다음과 같다.

도식화

여기서 또 다른 패키지2를 하나 만들어본다.

그럼 다음과 같은 에러가 난다.

pkg2의 에러

이유는 pkg1의 Parent클래스의 제어자가 default이기 때문이다.

default는 같은 패키지안에서만 사용 가능하므로 pkg2에서 쓰면 에러가 난다.

그래서 pkg1의 Parent클래스를 public으로 바꿔준다.

그럼 다음과 같은 에러가 또 난다.

또다시 pkg1의 에러

이유는 같은 패키지안에 public이 두 개 있으면 안 되기 때문이다.

그래서 ParentTest의 접근제어자를 default로 바꾼다.

ParentTest의 접근제어자를 default로

근데 그럼에도 Parent클래스가 오류가 나는데, 이유는 public클래스와 소스코드 파일 이름이 일치해야 하기 때문이다. 

모르면 여기 참고↓

https://feastforall.tistory.com/14

 

3)객체지향-한 파일에 여러 클래스 작성하기

3)객체지향-한 파일에 여러 클래스 작성하기 3-1) 하나의 소스파일에 여러 클래스 작성 원래는 소스파일:클래스=1:1로 들어가는 것이 보통이나, 그렇지 않은 경우도 있습니다. *유튜브 남궁성

feastforall.tistory.com

또 pkg2의 'class Parent2 extends Parent'에서 오류가 발생하는데..

pkg2가 아직까지 오류

이유는 import를 안 해줬기 때문.. ctrl+shift+o를 누르면 해결된다.

import를 추가

pkg2의 클래스들에 class Parent의 변수를 선언하면 

pkg2의 클래스들에 변수선언

Parent2에서 prv는 같은 클래스가 아니라서 에러.

dft는 같은 패키지가 아니라서 에러.

ParentTest2에서 prv는 같은 클래스가 아니라서 에러.

dft는 같은 패키지가 아니라서 에러.

prt는 같은 패키지도 아니고 자손클래스도 아니라서 에러가 난다.

도식화2
도식화3

 

 

*유튜브 남궁성 선생님의 `자바의 정석`을 참고하여 만들었습니다*
*자세히 보고 싶은 분들은 유튜브 가서 보시면 됩니다*

728x90
반응형