접근 제어자의 종류
접근 제어자 | 같은 클래스 | 같은 패키지 | 다른 패키지(서브클래스,상속) | 다른 패키지 |
`public` | O | O | O | O |
`protected` | O | O | O | X |
`(default)` | O | O | X | X |
`private` | O | X | X | X |
1. `public`
- 어디서나 접근 가능
- 제한이 없는 가장 개방적인 접근 제어자
- 사용 위치 : 클래스, 메서드, 변수, 생성자
- 특징 : 외부에서 자유롭게 사용 가능한 요소를 선언할때 사용
2. `protected`
- 같은 패키지와 다른 패키지의 서브클래스(상속)에서 접근 가능
- 같은 패키지에 있는 클래스에서는 접근 가능하지만 다른패키지에서는 서브클래스를 통해서만 접근 가능하다
package example;
public class Parent {
protected String message = "Hello, Subclass!";
protected void displayMessage() {
System.out.println(message);
}
}
package anotherExample;
import example.Parent;
public class Child extends Parent {
public void show() {
displayMessage(); // 서브클래스에서 접근 가능
}
}
- 사용 위치 : 메서드, 변수, 생성자 (클래스에서 불가능)
- 특징 : 상속을 고려하여 설계된 클래스에서 서브클래스에 특정 멤버를 노출하고 싶을때 사용
3. `(default)` (패키지 전용 접근)
- 접근 제어자를 명시하지 않을 경우 적용되는 기본값
- 같은 패키지 안에서만 접근 가능, 다른 패키지에서는 접근 불가
- 사용 위치 : 클래스, 메서드, 변수, 생성자
- 특징 : 패키지 내에서만 사용될 클래스나 메서드를 정의할때 유용
4. `private`
- 같은 클래스에서만 접근 가능
- 외부에서 접근할수 없고 다른클래스나 서브클래스에서도 접근할수없다
- 사용 위치 : 메서드, 변수, 생성자 (클래스에는 사용 불가능)
- 특징 : 외부에서 절대 접근하면 안되는 데이터나 메서드를 보호할때 사용
위치 | 클래스 | 변수 | 메서드 | 생성자 |
`public` | O | O | O | O |
`protected` | X | O | O | O |
`(default)` | O | O | O | O |
`private` | X | O | O | O |
캡슐화와 접근 제어자
캡슐화는 클래스 내부의 데이터와 동작을 외부로부터 보호하는 개념이다.
접근제어자를 통해 캡슐화를 구현할 수 있다 (ex: 게터,세터)
자세한 내용은 추후에 다루기로...
접근 제어자를 선택하는 기준
1. `private`
- 민감하거나 중요한 데이터를 외부에 노출시키고 싶지 않을때
- 데이터 보호를 최우선으로 할때
2. `(default)`
- 같은 패키지에서만 사용하는 클래스나 멤버를 만들때
- 패키지 수준의 모듈화를 지원하고자 할때
3. `protected`
- 상속을 활용하여 서브클래스에서만 접근할수 있도록 제한할때
- 서브클래스에서 공유가 필요하지만 외부에서는 보호가 필요한 경우
4. `public`
- 모든 곳에서 접근 가능하도록 설계해야 할 경우
- 공용 API나 유틸리티 클래스를 만들때
요약
- `public` : 모두 접근 가능
- `protected` : 같은 패키지 + 서브클래스에서만 가능 (상속 관계)
- `(default)` : 같은 패키지에서만 접근 가능
- `private` : 같은 클래스에서만 접근 가능
출처 : ChatGPT
'BE > Java' 카테고리의 다른 글
[Java] 캐스팅 (형 변환) (0) | 2024.12.01 |
---|---|
[Java] abstract와 interface (0) | 2024.11.30 |
[Java] static (0) | 2024.11.30 |
[Java] 메모리 계산 (1) | 2024.11.30 |
[Java] 변수 (0) | 2024.11.30 |