지금을 사는 사람

[Java] 접근제어자 Protected와 Default의 차이 본문

Java

[Java] 접근제어자 Protected와 Default의 차이

지금회 2023. 12. 22. 15:15
728x90

자바에서 protecteddefault (또는 package-private)는 다음과 같은 차이를 가지고 있습니다:

  1. 접근 범위:
    • protected: 같은 패키지 내에서는 물론이고 다른 패키지에서 상속받은 클래스에서도 접근이 가능합니다.
    • default (package-private): 같은 패키지 내에서만 접근이 가능하며, 다른 패키지에서 상속받은 클래스에서는 접근이 불가능합니다.
  2. 사용 목적:
    • protected: 주로 상속 관계에서 사용됩니다. 상위 클래스에서 protected로 선언된 멤버(필드 또는 메서드)를 하위 클래스에서 사용할 수 있습니다.
    • default (package-private): 같은 패키지에서만 사용 가능하므로, 해당 패키지의 내부적인 구현에 사용됩니다. 일반적으로 클래스나 멤버에 명시적인 접근 제어자가 없으면 default로 간주됩니다.

간단한 코드 예제로 설명하면 다음과 같습니다:

// 패키지 example1
public class A {
    protected void protectedMethod() {
        // 같은 패키지 내에서도 사용 가능
    }
}

// 패키지 example2
public class B extends example1.A {
    void accessProtectedMethod() {
        protectedMethod(); // 상속받은 클래스에서 protected 메서드 사용 가능
    }
}

// 패키지 example1
class C {
    void defaultMethod() {
        // 같은 패키지 내에서만 사용 가능
    }
}

// 패키지 example2
public class D {
    void accessDefaultMethod() {
        C c = new C();
        c.defaultMethod(); // 같은 패키지에서 인스턴스 생성 후 default 메서드 사용 가능
    }
}

이 예제에서 B 클래스는 A 클래스를 상속받았기 때문에 protectedMethod()에 접근이 가능합니다. 그러나 D 클래스는 C 클래스를 상속받지 않았으며 패키지가 다르기 때문에 C 클래스의 defaultMethod()에 직접 접근할 수 없습니다.

728x90

'Java' 카테고리의 다른 글

[Java] 인터페이스 (Interface)  (2) 2023.12.26
[Java] 상수(Constant)  (0) 2023.12.26
[Java] 접근 제어자(Access Modifiers)  (1) 2023.12.22
[Java] 애노테이션(Annotation)  (0) 2023.12.15
[Java] JVM (Java Virtual Machine)  (0) 2023.12.12