객체 지향 프로그램에서는 예약어
를 사용해 클래스 내부의 변수나 메서드, 생성자에 대한 접근 권한을 지정할 수 있다. 이를 접근 제어자(access modifier)
라 한다.
접근 제어자 | 같은 클래스의 멤버 | 같은 패키지의 멤버 | 자식 클래스의 멤버 | 그 외의 영역 |
---|---|---|---|---|
public | O | O | O | O |
protected | O | O | O | X |
default | O | O | X | X |
private | O | X | X | X |
자바 클래스는 private로 정보를 은닉하고, public 멤버로 사용자나 프로그램과의 인터페이스를 구축한다. protected 멤버는 부모 클래스에 대해서는 public 멤버처럼 취급되며, 외부에서는 private 멤버처럼 취급된다.
package AccessModifier;
public class AccessModifier {
public String getPublic = "나는 퍼블릭이야";
private String getPrivate = "나는 프라이빗이야";
protected String getProtected = "난 프로텍티드야";
public String getGetPublic(){
return this.getPublic;
}
public String getGetPrivate() {
return getPrivate;
}
public String getGetProtected() {
return getProtected;
}
}
package AccessModifier;
public class Test {
public static void main(String[] args) {
AccessModifier a = new AccessModifier();
//public으로 접근 가능
System.out.println(a.getPublic);
//같은 패키지이므로 접근 가능
System.out.println(a.getProtected);
// 같은 패키지 이나 같은 클래스가 아니므로 접근 불가 (에러 발생)
System.out.println(a.getPrivate);
// 하지만 메소드를 통해서 접근 가능하다.
System.out.println(a.getGetPublic());
System.out.println(a.getGetProtected());
System.out.println(a.getGetPrivate());
}
}
클래스의 멤버 변수를 private
로 선언하여 접근을 제한하고 get
, set
메소드를 통해 값을 수정하고 가져와 정보의 오류를 줄인다.