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를 하나 만들어본다.
그럼 다음과 같은 에러가 난다.
이유는 pkg1의 Parent클래스의 제어자가 default이기 때문이다.
default는 같은 패키지안에서만 사용 가능하므로 pkg2에서 쓰면 에러가 난다.
그래서 pkg1의 Parent클래스를 public으로 바꿔준다.
그럼 다음과 같은 에러가 또 난다.
이유는 같은 패키지안에 public이 두 개 있으면 안 되기 때문이다.
그래서 ParentTest의 접근제어자를 default로 바꾼다.
근데 그럼에도 Parent클래스가 오류가 나는데, 이유는 public클래스와 소스코드 파일 이름이 일치해야 하기 때문이다.
모르면 여기 참고↓
https://feastforall.tistory.com/14
또 pkg2의 'class Parent2 extends Parent'에서 오류가 발생하는데..
이유는 import를 안 해줬기 때문.. ctrl+shift+o를 누르면 해결된다.
pkg2의 클래스들에 class Parent의 변수를 선언하면
Parent2에서 prv는 같은 클래스가 아니라서 에러.
dft는 같은 패키지가 아니라서 에러.
ParentTest2에서 prv는 같은 클래스가 아니라서 에러.
dft는 같은 패키지가 아니라서 에러.
prt는 같은 패키지도 아니고 자손클래스도 아니라서 에러가 난다.
*유튜브 남궁성 선생님의 `자바의 정석`을 참고하여 만들었습니다*
*자세히 보고 싶은 분들은 유튜브 가서 보시면 됩니다*
'back-end > JAVA' 카테고리의 다른 글
31) 다형성(polymorphism) (0) | 2021.06.09 |
---|---|
30) 접근제어자와 캡슐화(encapsulation) (0) | 2021.06.07 |
28) 제어자 static, final, abstract (0) | 2021.06.07 |
27) import문, static import (0) | 2021.06.07 |
26) 패키지(package), 클래스패스(classpath) (0) | 2021.06.06 |