접근 제어자는 클래스의 맴버(변수와 메소드)들의 접근 권한을 지정한다. 이게 무엇을 의미하는지는 아래의 코드를 보자.
package org.opentutorials.javatutorials.accessmodifier;
class A {
public String y(){
return "public void y()";
}
private String z(){
return "public void z()";
}
public String x(){
return z();
}
}
public class AccessDemo1 {
public static void main(String[] args) {
A a = new A();
System.out.println(a.y());
System.out.println(a.x());
}
}
아래 코드는 실행된다.
System.out.println(a.y());
하지만 아래의 코드는 오류를 발생시킨다.
System.out.println(a.z());
오류의 내용은 아래와 같다.
Exception in thread "main" java.lang.Error: Unresolved compilation problem:
The method z() from the type A is not visible
at org.opentutorials.javatutorials.accessmodifier.AccessDemo1.main(AccessDemo1.java:15)
즉 메소드 z에 접근 할 수 없다는 의미다. 메소드 z의 본체를 보자.
private String z(){
return "public void z()";
}
메소드가 키워드 private으로 시작되고 있다. private은 클래스(A) 밖에서는 접근 할 수 없다는 의미다. 바로 이 private의 자리에 오는 것들을 접근 제어자(access modifier)라고 한다. 그럼 사용할 수 없는 메소드를 왜 정의하고 있는 것일까? 내부적으로 사용하기 위해서다. 다음 코드를 보자.
System.out.println(a.x());
메소드 x의 본체는 아래와 같다.
public String x(){
return z();
}
접근 제어자가 public이기 때문에 호출 할 수 있다. 그리고 메소드의 내용을 보면 내부적으로 메소드 z를 호출하고 있다. 메소드 z는 정상적으로 호출된다. 왜냐하면 메소드 x와 메소드 z는 같은 클래스의 소속이기 때문이다. 따라서 메소드 x에서 z를 호출 할 수 있는 것이다.