[Java] 접근 제한자

우노구나·2025년 8월 11일
접근 제한자접근 범위설명사용 예시
public모든 클래스에서 접근 가능패키지, 클래스, 상속 관계 상관없이 접근 가능공용 API, 유틸 메서드
protected같은 패키지 + 상속받은 자식 클래스외부 패키지라도 상속관계면 접근 가능상속 구조에서 일부 허용
(default)
(package-private)
같은 패키지접근 제한자를 쓰지 않으면 기본 적용패키지 내부 전용 기능
private같은 클래스 내부외부 접근 완전 차단필드, 헬퍼 메서드 은닉

1. public

  • 어디서든 접근 가능

  • 라이브러리의 API처럼 외부에서 쓰여야 하는 기능에 사용

public class MyClass {
    public void printHello() {
        System.out.println("Hello");
    }
}

2. protected

  • 같은 패키지 내에서는 자유롭게 접근 (package-private)

  • 다른 패키지라도 상속받은 클래스에서 접근 가능

package a;
public class Parent {
    protected void hello() {
        System.out.println("Hello from Parent");
    }
}

package b;
import a.Parent;
public class Child extends Parent {
    public void callHello() {
        hello(); // 상속받았으므로 접근 가능
    }
}

3. default (package-private)

  • 접근 제한자를 명시하지 않으면 기본 적용

  • 같은 패키지에서만 접근 가능

class MyClass {  // default 접근 제한
    void printMsg() {
        System.out.println("Same package only");
    }
}

4. private

  • 같은 클래스 내부에서만 접근 가능

  • 외부에서 직접 수정/접근을 막아 데이터 은닉 구현

public class User {
    private String password;

    public void setPassword(String password) {
        this.password = password;
    }
    public String getPassword() {
        return password;
    }
}

접근 제한자와 클래스

  • 최상위 클래스(Top-level class) 는 public 또는 default(package-private)만 가능

    • 이유: 클래스 자체가 외부에서 보이지 않으면 import가 불가능
  • 내부 클래스(Inner Class) 는 4가지 모두 사용 가능

public class OuterClass {    // ✅ 최상위 클래스
    class InnerClass {       // ❌ 최상위 아님 → 내부 클래스
    }
}

정리

  • public → 무제한 접근

  • protected → 같은 패키지 + 상속 관계 허용

  • default → 같은 패키지에서만

  • private → 해당 클래스 내부에서만

profile
기술 블로그

0개의 댓글