Access Modifier(접근 제어자)
2025. 4. 4. 16:47ㆍJAVA/JAVA 기초 문법
📕 Access Modifier (접근 제어자)란?
Access Modifier(접근 제어자)는 클래스, 변수, 메서드 등에 대한 접근 권한을 설정하는 키워드다.
즉, 어떤 클래스나 메서드가 다른 클래스에서 접근 가능한지 여부를 제어하는 역할을 한다.
📘 Access Modifier (접근 제어자) 종류
1. public (공용)
- 어디서든 접근 가능한 접근 제어자
- 같은 패키지 뿐만 아니라, 다른 패키지에서도 접근 가능
📖 예제
public class Example {
public int number = 10; // 어디서든 접근 가능
public void show() {
System.out.println("Hello");
}
}
public class Main {
public static void main(String[] args) {
Example example = new Example();
System.out.println(example.number); // 접근가능
example.show(); // 접근가능
}
}
결과
10
Hello
2. protected (상속 관게 접근 허용)
- 같은 패키지에서는 자유롭게 접근 가능
- 다른 패키지의 경우, 상속받은(자식) 클래스 에서만 접근 가능
📖 예제
package packageA;
public class Parent {
protected int value = 100; // 같은 패키지 + 상속받은 클래스에서 접근 가능
}
package packageB;
import packageA.Parent; // 상속
public class Child extends Parent {
public void showValue() {
System.out.println(value); // 상속받았으므로 접근 가능
}
}
public class Test {
public static void main(String[] args) {
Child child = new Child();
child.showValue(); // 접근 가능 (상속 관계이므로)
}
}
3. default (package-private, 접근 제어자 생략)
- 접근 제어자를 명시하지 않으면 기본적으로 default 접근자로 설정됨
- 같은 패키지에서만 접근 가능, 다른 패키지에서는 접근 불가능
📖 예제
package com.Tistory.Java;
class Example {
public static void main(String[] args) {
Example example = new Example();
System.out.println(example); // 같은 패키지는 접근 가능
}
}
package com.Tistory.Java2;
import com.Tistory.Java.*;
public class Test {
public static void main(String[] args) {
Example example = new Example(); // 에러 발생, 다른 패키지에서는 접근 불가능
System.out.println(example);
}
}
🚨 오류 발생!

4. private (완전 비공개)
- 같은 클래스 내에서만 접근 가능
- 외부 클래스, 자식 클래스에서도 접근 불가능
📖 예제
package com.Tistory.Java;
public class Example {
private void Hello() {
System.out.println("Hello");
}
public void show () {
Hello(); // 접근 가능
}
}
package com.Tistory.Java;
public class Test {
public static void main(String[] args) {
Example example = new Example();
System.out.println(example);
example.Hello(); // 에러 발생, 접근 불가능
}
}
🚨 오류 발생!

→ 같은 패키지에 있는 클래스여도
외부 클래스이기 떄문에 접근 불가능
📖 private 필드에 접근하는 방법 (Getter & Setter)
Getter와 Setter은 Java에서 클래스의 필드(멤버 변수)에 접근하고 값을 설정하거나 가져오는 메서드다.
객체지향 프로그래밍의 캡슐화 원칙을 지키기 위해 사용.
- Getter : 필드 값을 변환하는 메서드 > getFieldName() 형식
- Setter : 필드 값을 설정하는 메서드 > setFieldName(value) 형식
package com.Tistory.Java;
public class Example {
private int age = 0; // private 필드
// Getter
public int getAge() {
return age;
}
// Setter
public void setAge(int age) {
this.age = age;
}
}
package com.Tistory.Java;
public class Main {
public static void main(String[] args) {
Example example = new Example();
example.setAge(0); // Setter을 이용한 값 설정
int age = example.getAge(); // Getter을 이용한 값 가져오기
}
}
📘 클래스 레벨과 멤버 레벨에서의 접근 제어자
📖 클래스 레벨
| 접근 제어자 | 사용 가능 |
| public | 🔵 |
| protected | ❌ |
| default | 🔵 |
| private | ❌ |
📖 멤버 레벨

📕 Access Modifier 정리 📕
| 접근 제어자 | 접근 가능 범위 | 특징 |
| public | 어디서든 접근 가능 | 가장 개방적, 제한 없음 |
protected |
같은 패키지 + 상속받은 클래스 | 주로 상속 관계에서 사용 |
default |
같은 패키지에서만 접근 가능 | 접근 제어자 생략 시 기본값 |
private |
같은 클래스에서만 접근 가능 | 가장 제한적, 외부 접근 불가 |
'JAVA > JAVA 기초 문법' 카테고리의 다른 글
| 자바에서 This (0) | 2025.04.15 |
|---|---|
| Constructor (생성자) (0) | 2025.04.14 |
| 변수(Variable) 필드(Field) 객체(Object) (0) | 2025.04.04 |
| Parameter와 Argument (0) | 2025.04.02 |
| Method (0) | 2025.04.01 |