
안녕하세요. 이번에는 접근제한자에 대해 알아볼 건데요!
접근 제한자(Access Modifiers)
클래스, 메서드, 필드 등에 대한 접근 권한을 제어하는 데 사용(약속)하는 친구예요!
코딩의 시작 첫 파일을 실행 중 화면을 보시면
public class Hello {
public static void main(String[] args) {
}
}
대부분 이렇게 코딩을 시작하게 됩니다.
그중 앞에 public이 바로 접근제어자입니다.
public을 사용한 이유는 시작점을 자바가 찾을 수 있게 일부러 public으로 열어두는 거예요!
이제부터 왜 접근제어자 중 시작이 왜 public인지 그리고 종류가 몇 가지가 있는지 함께 보시죠!
public
첫 번째 코드는 public입니다.
이 친구는 모든 클래스에서나 접근 가능(패키지나 상속과 무관)한 아주 자유로운 친구예요!
이 친구의 사용도는 어디서나 사용할 수 있도록 열어두고 싶을 때 사용한답니다.
protected
두 번째 코드는 protected입니다.
이 친구는 public과는 다르게 같은 패키지 내에서만 사용가능합니다.
그리고 다른 패키지의 자식 클래스(subclass)에도 사용 가능합니다.
사용도는 상속 관계에서 자식 클래스가 부모 클래스의 멤버에 접근할 수 있도록 할 때 주로 사용해요!
class Parent {
protected void show() {
System.out.println("Hello from Parent");
}
}
class Child extends Parent {
void display() {
show(); // 가능 (protected이므로 상속된 자식 클래스에서 접근 가능)
}
}
간단한 기본 예시로 부모에게 상속된 자녀 클래스가 부모 클래스에게 접근 가능한 걸 볼 수 있답니다.
default
default는 다른 클래스와 다르게 접근제어자를 명시하지 않는 특이한 친구입니다.
주 사용도는 같은 패키지에서만 사용하도록 제한할 때 사용한답니다.
// 접근제어자 생략 == default
void logMessage(String msg) { ... }
이 로그 기록을 내부에서만 쓸 수 있도록 하고 싶을 때 사용한다고 생각하시면 됩니다!
private
마지막 private은 같은 클래스 내부에서만 접근가능합니다.
그런데 특이한 점은 외부에서 직접 접근하지 못하도록 막고,
메서드를 통해 간접적으로 접근하게 하도록 사용한다는 거예요!
class MyClass {
private int number;
public int getNumber() {
return number;
}
public void setNumber(int num) {
this.number = num;
}
}
사용하는 이유는 간단히 얘기하자면 "나만 봐!"입니다!
| 접근 제어자 | 같은 클래스 | 같은 패키지 | 다른 패키지(상속 X) | 다른 패키지 (상속 O) |
| public | ✅ | ✅ | ✅ | ✅ |
| protected | ✅ | ✅ | ❌ | ✅ |
| (default) | ✅ | ✅ | ❌ | ❌ |
| private | ✅ | ❌ | ❌ | ❌ |
간단하게 요약을 표로 정리했답니다!
공부를 한다면 이런 생각도 들 거예요.
'굳이 다 사용하지 않고 몇 개만 사용하면 좋지 않을까?'
접근제어자를 4가지를 사용하는 이유는
코드를 보호와 책임을 분리, 협업과 유지보수에 강한 구조를 만들기 위해서입니다.
접근제어자를 잘 사용한다면 완성도가 더 높지 않을까요?

이렇게 접근제어자를
이렇게 접근제어자의 종류 총 4가지를 봤는데요.
그래도 public만 고집을 할래 라는 생각한다면
완성된 작품은 집으로 표현한다면
"모든 문을 열어 놓고 사는 집" 같을 거예요 ㅎㅎ
접근제어자를 다양하게 사용해서
깔끔하고 견고한 집 같은 작품을 만들어보는 건 어떨까요?
'Backend > Java' 카테고리의 다른 글
| 상속과 구현(extends VS implements) (1) | 2025.07.12 |
|---|---|
| 인터페이스와 추상화 클래스(interface VS abstract class) (0) | 2025.07.12 |
| 스태틱과 인스턴스의 차이점( static VS instance) (2) | 2025.07.12 |
| 업캐스팅과 다운캐스팅 (2) | 2025.07.11 |
| 오버라이딩과 오버로딩 (0) | 2025.07.08 |