접근 제한자란 쉽게말해 '접근권한을 어디까지 줄것이냐'가 핵심입니다.
접근제한자는 public, protected, default, private 4가지가 존재합니다.
| 지시자 | 클래스 내부 | 동일 패키지 | 상속 받은 클래스 | 이외의 영역 |
|---|---|---|---|---|
| private | O | X | X | X |
| default | O | O | X | X |
| protected | O | O | O | X |
| public | O | O | O | O |
이중에서 public과 default만 클래스를 정의할 때 사용이 가능합니다.
public class a{
...
}
class b {
...
}
클래스에서 사용가능한 접근제한자는 위와 같이 표현이 가능합니다.
접근 제한자부분을 비워 놓거나 default라 쓰면 default 수준의 클래스를 정의할 수 있습니다.
다음은 인스턴스 변수와 메소드를 대상으로 적용할 수 있는 접근제한자를 코드로 적용해보겠습니다.
public class c {
public int num1;
int num2; // 접근 제한자를 쓰지 않으면 default가 적용
protected int num3;
private num4;
public void aaa() {}
void bbb() {} // 마찬가지로 접근 제한자를 쓰지 않으면 default가 적용
protected void ccc() {}
private void ddd() {}
}
그럼 실제로 코드를 작성해서 접근이 제한되는지 확인해보겠습니다.
package zoo;
public class Tiger {
public void shout() {
System.out.println("어흥");
}
}
package zoo;
class Elephant {
public void shout() {
System.out.println("뿌우우");
}
}
package zz;
public class Run {
public static void main(String[] args) {
new zoo.Tiger().shout();
new zoo.Elephant().shout();
}
}
zoo라는 패키지에 Tiger, Elephant 클래스를 생성하고 다른 패키지에 Run클래스를 생성하고 실행을 해봤습니다.
그러면 Tiger클래스는 정상작동하고 Elephant클래스는 오류가 나는것을 확인할 수 있습니다.