[Java] 접근 제어
변수나 메소드 앞에 public을 붙여 사용했는데, public은 무엇일까?
public class AccessLevelModifiersMethod {
public static void main(String[] args) {
hi();
}
private static void hi() {
System.out.println("Hi");
}
}
· hi 메소드: "Hi" 를 콘솔에 출력하는 private 메소드
-> main 메소드에서 잘 실행된다.
hi 메소드가 다른 클래스의 소속이라면 main 메소드에서 잘 실행될까?
public class AccessLevelModifiersMethod {
public static void main(String[] args) {
hi();
Greeting.hi(); //Error
}
private static void hi() {
System.out.println("Hi");
}
}
class Greeting{
private static void hi() {
System.out.println("Hi");
}
}
· Greeting 클래스의 hi 메소드를 main 메소드에서 실행하면 오류 발생
-> hi는 private 메소드라서 Greeting 클래스 밖에서 직접 접근해서 사용 불가
class Greeting{
public static void hi() {
System.out.println("Hi");
}
}
· hi 메소드를 public으로 바꾸면 잘 실행된다.
-> public은 클래스 외부에서도 바로 접근해서 사용 가능
** 접근 제어라는 장치가 왜 있는 것일까?
public은 선풍기의 버튼과 같이 사용자가 외부에서 선풍기의 동작을 제어하기 위해 바깥으로 드러나서 호출할 수 있는 것들을 위해 지정한다.
private는 선풍기의 부품, 전선과 같이 동작을 위해 꼭 필요하지만, 외부에서 굳이 알 필요도 없거나 알아서는 안되는 것들을 위해 지정한다.
접근 제어자
접근 제어자(access modifier)
· 클래스나 멤버들을 다른 클래스에서 접근해도 되는지의 여부를 선언하는 지시어
[클래스 접근 제어]
1. public 클래스: 모든 클래스에게 접근 허용
2. default 클래스: 같은 패키지의 클래스에만 접근 허용
[멤버 접근 제어]
private -> default -> protected -> public 순으로 접근 허용 범위가 넓어진다.
1. private 멤버: 동일 클래스 내에만 접근 허용
2. default 멤버: 같은 패키지 내의 클래스에게 접근 허용
3. protected 멤버
- 같은 패키지 내의 클래스에게 접근 허용
- 자식 클래스는 다른 패키지에 있어도 접근 가능
4. public 멤버: 패키지에 상관없이 모든 클래스에게 접근 허용
** 접근 제어자 생략 -> default