접근 제어자(modifire)또는 접근 제한자
클래스, 변수, 메소드의 접근 범위를 제어
외부로부터 데이터를 보호, 객체간의 의존성을 최소화하는 역할
코드의 보안성을 향상, 캡슐화를 구현함
접근 제어자 종류
public, default, protected, private
생략하면 자동으로 default를 지정한다
접근 제어자의 범위
public > protected > default > private
private: 같은 클래스 내에서만 접근 가능
class PrivateClass {
private int myField;
private void myMethod() {
System.out.println(myField);// PrivateClass 내부에서만 사용 가능
}
}
default: 같은 패키지 내에서 접근 가능. 단, 패키지 외부에서는 접근 불가능
class DefaultClass {
int myField;
void myMethod() {}
}
protected: 동일한 패키지 내의 모든 클래스에서 접근 가능.
단, 다른 패키지에서 해당 클래스를 상속받은 하위 클래스에서도 접근 가능
class ProtectedClass extends OtherClass{
// String otherField;
ProtectedClass() {
// 상속받은 부모 클래스의 필드 & 메소드
System.out.println(otherField);
otherMethod();
}
}
public: 클래스나 패키지의 위치와 상관없이 접근 가능
예시)
public class A_Modifier {
public class Modifire{}// 중첩 클래스: 접근 제어자 사용 제한 X
public static void main(String[] args) {
PrivateClass privateClass = new PrivateClass();
// privateClass.myField;
// privateClass.myMethod; >> 접근제어자는 가시성을 나타낸다
// 해당 클래스 (PrivateClass) 내부에서만 접근 가능
DefaultClass defaultClass = new DefaultClass();
System.out.println(defaultClass.myField);// 0 - 타입의 기본값으로 초기화
defaultClass.myField = 10;
defaultClass.myMethod();
ProtectedClass protectedClass = new ProtectedClass();
// 다른 클래스의 필드
// 다른 클래스의 메소드
//protectedClass.myField = "다른 패키지의 필드값 변경";
PublicClass publicClass = new PublicClass();
System.out.println(publicClass.publicField);
publicClass.publicMethod();
}
}