Java
[Java] 접근 제어자
junga
2022. 9. 8. 23:31
- 아래와 같은 접근제어자를 사용하여 변수나 메서드의 사용 권한을 설정할 수 있다.
- public
- protected
- default
- private
위 순서대로 접근이 점점 제한된다.
private
- private이 붙은 변수, 메소드는 해당 클레스에서만 접근이 가능하다.
public class Main {
public static void main(String[] args) {
Access ac = new Access();
System.out.println(ac.a); // 100
System.out.println(ac.b); // 에러 발생, java: b has private access in Access
ac.getB(); // 200
}
}
class Access {
int a = 100;
private int b = 200;
// 같은 클래스에서는 접근 가능
public void getB() {
System.out.println(b);
}
}
default
- 접근 제어자를 별도로 설정하지 않는다.
- 같은 패키지에서만 접근 가능하다.
junga 라는 패키지안에 Main.java와 Test.java 파일이 있다.
Main에서 Test파일안에 있는 Access 클래스에 접근해보자.
// junga/Test.java
package junga;
class Access {
// default 변수 선언
int a = 100;
}
// junga/Main.java
package junga;
import junga.Access;
// 임포트해야 사용 가능,
// junga.*; 을 사용하면 junga(특정)패키지내에 모든 클래스를 사용할 수 있다.
public class Main {
public static void main(String[] args) {
Access ac = new Access();
System.out.println(ac.a); // 100
// 잘 출력되는걸 볼 수 있다.
// Main클래스와 Access클래스가 같은 패키지가 아니었다면 에러가 발생하게 됨
}
}
protected
- 같은 패키지나 상속받을 경우 접근이 가능하다.
위 사진의 패키지 구조에서 protected를 사용해보자
// junga2/Access.java
package junga2;
public class Access {
protected int a = 100;
}
// junga/Main.java
package junga;
import junga2.Access;
public class Main extends Access { // 상속
public static void main(String[] args) {
Main ac = new Main();
System.out.println(ac.a); // 100
// 상속받는 경우엔 다른패키지여도 접근이 가능하다.
}
}
public
- 패키지, 클래스 상관없이 접근이 가능하다.