[Java] 심화 - 접근제어자

이지연·2025년 12월 19일

개요

아래의 내용은 java_grammer 레파지토리 C03Inheritance 디렉터리에 저장되어있는 내용을 정리함


클래스 접근제어자

자바에서 클래스에 사용할 수 있는 접근제어자는 publicdefault(생략형) 두 가지뿐임.

접근제어자접근 범위설명
public프로젝트 전체모든 패키지, 클래스에서 접근 가능
default같은 패키지접근제어자를 명시하지 않았을 때 기본값으로 적용됨

package C03Inheritance;

public class C04ProtectedClass {
    // 변수, 메서드 접근제어자 정리
    public String st1 = "hello java 1";
    private String st2 = "hello java 2";
    String st3 = "hello java 3"; // default
    protected String st4 = "hello java 4";
}

변수, 메서드 접근제어자

접근제어자접근 가능 범위특징
public프로젝트 전체모든 클래스, 패키지에서 접근 가능
protected동일 패키지 + 상속받은 클래스상속관계라면 다른 패키지에서도 접근 가능
default동일 패키지접근제어자를 명시 안 하면 기본으로 적용되는 값
private해당 클래스 내부외부 클래스나 상속 관계에서도 접근 불가

접근 범위는 다음 순서로 넓어지는 것임.
private < default < protected < public


접근제어자 실습 코드

package C03Inheritance;

public class C05ProtectedTest {
    public static void main(String[] args) {
        C04ProtectedClass c1 = new C04ProtectedClass();

        System.out.println(c1.st1); // public
        //System.out.println(c1.st2); // private (접근 불가)
        System.out.println(c1.st3); // default
        System.out.println(c1.st4); // protected
    }
}

위 코드에서는 C04ProtectedClass의 각 변수들이 어떤 접근 범위를 가지는지 확인하는 예제임.

  • st1public이므로 어디서든 접근 가능함.
  • st2private이므로 클래스 내부에서만 접근 가능함. (테스트 클래스에서는 접근 불가)
  • st3는 기본값인 default이므로 같은 패키지 내에서는 접근 가능함.
  • st4protected이므로 같은 패키지에서는 접근 가능하며, 다른 패키지라도 상속받은 클래스에서는 접근 가능함.

protected의 특징 정리

protected는 다른 패키지에서는 접근이 제한되지만, 상속 관계일 때는 예외적으로 접근 가능한 특수한 접근제어자임.

즉,

  • 같은 패키지 → 접근 가능
  • 상속관계의 다른 패키지 → 접근 가능
  • 그 외 패키지의 비상속 클래스 → 접근 불가

이 차이점 때문에 protected상속을 고려한 캡슐화를 구현할 때 자주 사용되는 접근제어자임.


정리

구분접근제어자접근 가능 범위비고
클래스public / default전체 / 동일 패키지클래스에는 protected, private 사용 불가
필드 / 메서드public, protected, default, private전체 → 동일 패키지 → 상속관계 → 내부접근 수준 조정용
profile
Eazy하게

0개의 댓글