[Java] 접근 제어자 정리(private, default, protected, public)
오늘은 자바의 접근 제어자(Access Modifier)를 정리해보도록 하겠습니다.
접근 제어자는 클래스, 변수, 메서드 앞에 붙으면서 이에 대한 접근을 제어해주는 예약어입니다.
자바의 접근 제어자는 4가지가 있습니다.
private |
같은 클래스 내에서 사용 가능 |
default |
같은 패키지 내에서 사용 가능 |
protected |
같은 패키지 내에서 사용 가능, 상속 관계일때 다른 패키지에서 사용 가능 |
public |
같은 프로젝트 내에서 사용 가능 |
아래와 같은 패키지 구조가 있을때, 위의 표를 적용해볼까요❓
1. A에서 private 변수를 만들면 A에서 사용이 가능합니다.
2. A에서 default 변수를 만들면 A, B에서 사용이 가능합니다.
3. A에서 protected 변수를 만들면 A, B, C에서 사용이 가능합니다.
4. A에서 public 변수를 만들면 A, B, C, D에서 사용이 가능합니다.
코드를 이용해서 직접 눈으로 확인해봅시다! 👀
이렇게 A에 private, default, protected, public 변수를 생성했습니다.
class A
- A에서는 자기 자신의 private, default, protected, public 변수 모두 사용이 가능합니다.
class B
- A와 같은 패키지 내에 있는 B에서는 A의 default, protected, public 변수가 사용이 가능합니다.
class C
- 다른 패키지에 있는 A를 상속받은 C에서는 C의 객체로 A의 protected, public 변수가 사용이 가능합니다.
- A의 객체로는 public 변수만 사용이 가능합니다.
왜 같은 클래스 내의 C 객체와 A 객체의 결과가 다른것일까요 ❓
C 객체는 A와 상속관계인 C의 객체이므로 protected 변수가 사용이 가능하고,
A 객체는 외부 클래스인 A의 객체이므로 protected 변수가 사용이 불가능합니다.
class D
- 다른 패키지에 있는 D에서는 A의 public 변수만 사용이 가능합니다.
각 접근 제어자의 접근 허용 범위를 정리하고 직접 코드로 확인을 해보았는데요.
그렇다면 접근 제어자를 사용하는 이유는 무엇일까요❓
바로 ❗️보안❗️ 입니다.
예를 들어, 아이디와 비밀번호 같은 중요한 정보에 public 접근 제어자를 사용하면 이 정보를 처리하는 클래스가 아닌 다른 클래스에서도 이 정보에 직접적으로 접근하여 값을 변경하는 등 예기치 않은 상황이 발생할 수 있습니다.
또한, 협업을 할때 내가 만든 중요한 변수나 메서드를 다른 개발자가 접근하여 값을 변경하는 상황이 생길 수 있습니다.
이런 상황들을 예방하고자 상황에 맞는 적절한 접근 제어자를 사용하는 것이 중요합니다. ✨