7.6 protected 접근 제한자

protected는 자바의 접근 제한자 중 가장 독특한 녀석입니다. public(모두 환영)보다는 좁고, default(같은 패키지만)보다는 넓습니다.

💡 핵심 비유: 우리 동네 + 멀리 사는 자식

“우리 동네 사람(같은 패키지)은 다 쓸 수 있고, 다른 동네로 이사 간 자식(상속받은 클래스)에게도 물려줄 수 있다.”

Protected Access


1. 접근 범위

접근 제한자 같은 클래스 같은 패키지 자식 클래스 그 외 (외부)
public O O O O
protected O O O X
default O O X X
private O X X X

핵심: protected는 기본적으로 같은 패키지에서만 접근 가능하지만, ‘상속’ 관계라면 패키지가 달라도 접근을 허용해 줍니다.




2. 예제 코드: 다른 패키지의 자식 클래스

패키지 A: 부모 클래스

package packageA;

public class Parent {
    // protected 필드
    protected String field;

    // protected 생성자
    protected Parent() {}

    // protected 메소드
    protected void method() {}
}

패키지 B: 자식 클래스

package packageB;

import packageA.Parent;

public class Child extends Parent { // Parent 상속
    public void childMethod() {
        // 패키지가 다르지만, 상속받았으므로 접근 가능!
        this.field = "value";
        this.method();
    }
}

패키지 B: 남남인 클래스

package packageB;

import packageA.Parent;

public class Stranger {
    public void method() {
        // 상속받지 않았으므로 접근 불가 (에러!)
        // Parent p = new Parent(); 
        // p.field = "value";
    }
}




요약

protected“상속을 위한 배려”가 담긴 접근 제한자입니다. 자식에게는 물려주고 싶지만, 아무나 쓰게 하고 싶지는 않을 때 사용합니다.

서브목차