3. 접근 제어자
1. 접근 제어자, Access modifier
접근 제어자는 말 그대로 접근을 제어하는 역할을 수행하는 키워드, 구분자라고 볼 수 있음
1-1. 무엇에 대한 접근을 제어하는지?
어떤 클래스 자체 혹은 클래스가 가진 멤버에 대해 외부(outside)에서 접근하지 못하도록 제한하는 역할을 함
💡
Tip
외부(outside)의 범위, 기준
해당 클래스를 제외한 다른 클래스
→ 다른 패키지, 다른 프로젝트 등 현재 작성 중인 파일의 위치를 제외한 나머지 전부
따라서 이러한 제어자를 사용 가능한 위치는
클래스 이름이나 클래스로 생성된 객체의 멤버(member) 앞에 작성할 수 있음
💡
Tip
멤버의 요소
- 멤버 변수(field)
- 멤버 메서드(method)
- 생성자
- 내부(inner) 클래스
1-2. 적용 예시
Mouse.java
public class Mouse {
private int age;
public Mouse(int age) {
this.age = age;
}
public void setAge(int age) {
this.age = age;
}
public void getAge() {
return age;
}
public void printAge() {
// 자신의 클래스 내에서는 private 변수 age에 접근 가능
System.out.println(age + "살");
}
}Main.java
public class Main {
public static void main(String[] args) {
Mouse jerry = new Mouse(5); // OK
mouse.age = 10; // Compile Error. "field Mouse.age is not visible"
mouse.setAge(7); // OK
printAge(); // OK, "7살"
System.out.println(getAge()); // OK, 7
}
}2. 제어자별 접근 제한 범위
이러한 접근 제어자는 제어자 키워드 별로 접근이 제한되는 범위가 조금씩 다름

2-1. public
접근 제한이 전혀 없음, 모든 곳에서 접근 가능
2-2. protected
각 클래스들 간 즉, .java 파일이 서로 같은 패키지에 위치하거나 해당 클래스의 하위 클래스에서 접근 가능
2-3. default(package-private)
같은 패키지 내에 위치한 클래스 내에서만 허용
2-4. private
해당 클래스 자기 자신만 접근 가능
💡
Tip
만약 개발자가 public, protected, private 중에 별도의 접근제어자를 작성하지 않을 경우,
해당 멤버는 컴파일러가 기본으로default(package-private) 접근 제어자를 적용시킴
Mouse.java
public class Mouse {
Mouse() {} // default Mouse() {}와 동일
}Last updated on