250x250
Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
Tags
- 티스토리챌린지
- 인터페이스
- dotnet
- 혼공자바
- 접근 제어자
- Functional Interfaces
- 나도코딩
- cluster index
- entrySet
- noncluster index
- java
- Interface
- 인프런
- 혼공학습단
- HashMap
- literal
- 자율학습
- 혼공컴운
- 오블완
- Wildcard
- Proxy Object
- Lazy loading
- 0 시작
- Spring Data JPA
- 접근제어자
- 혼공
- 네트워크
- 스프링 부트 3
- types
- Access Modifier
Archives
- Today
- Total
지금을 사는 사람
[Java] 접근제어자 Protected와 Default의 차이 본문
728x90
자바에서 protected
와 default
(또는 package-private)는 다음과 같은 차이를 가지고 있습니다:
- 접근 범위:
protected
: 같은 패키지 내에서는 물론이고 다른 패키지에서 상속받은 클래스에서도 접근이 가능합니다.default
(package-private): 같은 패키지 내에서만 접근이 가능하며, 다른 패키지에서 상속받은 클래스에서는 접근이 불가능합니다.
- 사용 목적:
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 |