Skip to Content
Suffering builds character

3. 접근 제어자

1. 접근 제어자, Access modifier

접근 제어자는 말 그대로 접근을 제어하는 역할을 수행하는 키워드, 구분자라고 볼 수 있음

1-1. 무엇에 대한 접근을 제어하는지?

어떤 클래스 자체 혹은 클래스가 가진 멤버에 대해 외부(outside)에서 접근하지 못하도록 제한하는 역할을 함

💡
Tip

외부(outside)의 범위, 기준
해당 클래스를 제외한 다른 클래스
→ 다른 패키지, 다른 프로젝트 등 현재 작성 중인 파일의 위치를 제외한 나머지 전부

따라서 이러한 제어자를 사용 가능한 위치는
클래스 이름이나 클래스로 생성된 객체의 멤버(member) 앞에 작성할 수 있음

💡
Tip

멤버의 요소

  1. 멤버 변수(field)
  2. 멤버 메서드(method)
  3. 생성자
  4. 내부(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. 제어자별 접근 제한 범위

이러한 접근 제어자는 제어자 키워드 별로 접근이 제한되는 범위가 조금씩 다름

access_modifier

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