Study/Java

접근제어자

sowon02 2025. 7. 8. 16:31

자바는 객체 지향의 캡슐화(Encapsulation)를 구현하기 위해 접근제어자(Access Modifier)를 사용한다.
접근제어자는 클래스, 변수, 메서드가 다른 클래스/패키지/상속 관계에서 어느 범위까지 접근 가능한지를 결정.


1. 자바 접근제어자 종류


접근제어자 클래스 내 같은 패키지 상속관계 다른 패키지
public O O O O
protected O O O X
(default) O O X X
private O X X X
 

1) public

  • 어디서든 접근 가능.
  • 다른 패키지, 다른 클래스에서도 사용 가능.
  • 주로 라이브러리 API, 유틸리티, 공개 메서드에서 사용.

2) protected

  • 같은 패키지 + 상속받은 자식 클래스에서 접근 가능.
  • 다른 패키지의 경우 상속 관계가 있어야 접근 가능.
  • 주로 상속 관계에서 자식 클래스만 접근 가능하도록 할 때 사용.

3) (default) (접근제어자를 쓰지 않음)

  • 같은 패키지에서만 접근 가능.
  • 패키지 외부, 상속 관계에서도 접근 불가.
  • "패키지 프라이빗(package-private)"라고 부르기도 함.
  • 같은 기능 묶음(패키지) 안에서만 사용하게 하고 외부에는 숨기고 싶을 때 사용.

4) private

  • 해당 클래스 내부에서만 접근 가능.
  • 다른 클래스, 자식 클래스, 같은 패키지에서도 접근 불가.
  • 데이터 은닉(Encapsulation) 을 구현하기 위해 사용.
  • 멤버 변수는 private, 접근은 public getter/setter로 제공하는 것이 OOP의 일반적인 습관(캡슐화를 위해).

 
2. 클래스에 접근제어자 사용
  • public, (default)만 사용 가능.
  • protected, private는 클래스 선언에 사용할 수 없음.
  • 클래스 자체를 외부에서 사용 가능하게 할지(공개), 패키지 내부에서만 사용할지(숨김)를 결정할 때 사용.

 

3. 접근제어자와 캡슐화의 관계

  • 접근제어자는 데이터 보호, 의도하지 않은 사용 방지, 유지보수성을 높이기 위해 필수적.
  • 멤버 변수는 private으로 숨기고, 외부에는 public 메서드를 통해서만 접근하도록 제한:
  • 외부에서는 직접 balance를 변경할 수 없고 deposit, getBalance 메서드를 통해서만 관리.
 
public class Account {
    private int balance;

    public int getBalance() { return balance; }
    public void deposit(int amount) { this.balance += amount; }
}

4. 정리

public: 언제 어디서든 접근 가능 (공개 API, 유틸리티, Controller, Service Interface)
protected: 상속 + 같은 패키지 접근 허용 (상속 확장용 메서드에서 활용)
(default): 같은 패키지 접근만 허용, 의존성 낮추기 위해 내부용으로 자주 사용
private: 해당 클래스 내부에서만 사용, 캡슐화 및 내부 로직 은닉용

'Study > Java' 카테고리의 다른 글

정적 멤버와 static  (0) 2025.07.08
인스턴스 멤버와 this  (0) 2025.07.08
상속(Inheritance)와 다형성(Polymorphism)  (0) 2025.07.07
캡슐화(Encapsulation)  (0) 2025.07.06
JAVA 기본 개념(배열, 연산자, 조건문, 반복문)  (0) 2025.07.06