접근지정자는 클래스나 패키지에서 다른 클래스나 패키지로 접근해도 되는지 여부를 지시하는 지시어이다.
접근지정자는 다음과 같은 종류가 있다.
- public
- default
- private
- protected
1. public
패키지에 상관 없이 어떤 클래스에서도 사용이 허용된다.
ex)
package a;
public class PublicData {
public int num=10;
}
package b;
import a.PublicData;
public class App{
public static void main(String[] args) {
PublicData p=new PublicData();
System.out.println("public : "+p.num);
패키지가 a와 b 서로 다름에도 불구하고 서로 참조가 가능하다.
2. default (딱히 접근자를 지정하지 않고 공백으로 두기도 함)
default 접근 지정자를 가지고 있을 경우 한 패키지 내에서만 접근이 가능하다.
package a;
public class DefaultData {
int num=10;
}
package b;
import a.DefaultData;
public class App extends ProtectedData{
public static void main(String[] args) {
DefaultData d= new DefaultData();
System.out.println("default : "+d.num);
다음과 같이 다른 패키지에서는 접근할 수가 없다.
3. private
private 접근 지정자는 같은 클래스 내에서만 접근이 가능하다.
package a;
import lombok.Data;
@Data
public class PrivateData {
int num=10;
}
package b;
import a.PrivateData;
public class App extends ProtectedData{
PrivateData pd=new PrivateData();
System.out.println("private : "+pd.num);
다른 패키지일뿐만 아니라 클래스도 다르기 때문에 오류가 난다. (변수의 은닉화에 사용하던 접근 지정자 맞음)
그렇기 때문에 이를 해결하기 위해서 변수를 getter setter 매서드를 통해 간접 접근한다.
PrivateData pd=new PrivateData();
System.out.println(pd.getNum());
4. protected
protected는 같은 패키지 내에서만 접근을 허용한다.
package a;
public class ProtectedData {
protected int num=20;
}
package a;
public class App {
public static void main(String[] args) {
ProtectedData p=new ProtectedData();
System.out.println("protedcted : "+p.num);
}
}
그러나 다른 클래스 내에서는 접근할수가 없다.
package b;
import a.ProtectedData;
public class App{
public static void main(String[] args) {
ProtectedData pt=new ProtectedData();
System.out.println(pt.num);
}
}
protected 접근 지정자를 가지고 있는 클래스나 변수를 타 패키지에서 접근하려고 하면 그 클래서를 상속받아야 한다.
package b;
import a.ProtectedData;
public class App extends ProtectedData{
public static void main(String[] args) {
App pt=new App();
System.out.println(pt.num);
이 때, 변수는 현재 클래스명으로 설정해야한다.
반응형
'JAVA' 카테고리의 다른 글
14. Json (0) | 2020.04.06 |
---|---|
13. 입출력 (0) | 2020.04.06 |
JAVA 실습 8. 객체 지향, 제네릭과 컬렉션을 이용한 커피숍 만들기. (0) | 2020.04.03 |
Warpper 클래스와 제네릭 기초 (0) | 2020.04.03 |
12. 컴포지션 (0) | 2020.04.03 |