접근 제어자란, 필드나 메서드, 생성자에 접근할 수 있는 사용자를 제어하겠다는 것이다.
외부로 부터의 접근을 막아 버그를 방지하고 기대한 대로 기능이 작동할 수 있도록 유도한다.
예를 들어, 내 이름을 바꿀 수 있는건 나로 한정하고,
다른 사람은 내 이름을 변경할 수 없도록 막아
어디선가 갑자기 내 이름이 변경되는 일이 없도록 막는다.
package class.a;
class ClazzA {
public void publicMethod() {
// 메서드 바디
}
default void defaultMethod() {
// 메서드 바디
}
protected void protectedMethod() {
// 메서드 바디
}
private void privateMethod() {
// 메서드 바디
}
public void accessMethod() {
defaultMethod();
privateMethod();
}
package clazz.b;
class ClazzB extends ClassA {
publicMethod(); // public 호출 가능
defaultMethod(); // 패키지가 달라 호출 불가
protectedMethod(); // 패키지가 다르지만 상속 관계이므로 호출 가능
privateMethod(); // private 호출 불가
accessMethod(); // public이므로 호출 가능, 메서드 내부 default, private 메서드에 접근 가능
}
파일명 : Clazz.java
public class Clazz {
// 클래스 본문
}
// 불가
public class Clazz2 {
// 클래스 본문
}
// 가능
class DefaultClazz1 {
// 클래스 본문
}
class DefaultClazz2 {
// 클래스 본문
}