[Java] 자바 접근 제한자 총정리

김찬미·2024년 5월 29일

Java

목록 보기
5/20

자바 프로그래밍을 하다 보면 특정 변수나 메서드 앞에 private, public 등을 붙일 때가 있다. 나 또한 어렴풋이 의미를 알고 있긴 하지만 정확한 의미와 종류, 차이에 대해선 설명할 수 없었다. 그래서 이번엔 자바 접근 제한자에 대해 정리를 해보려고 한다.


자바 접근 제한자

자바에는 총 4가지 접근 제한자가 존재한다. private, public, protected, default 가 그것이다. 각각의 접근 제한자가 어떤 역할을 하는지와 언제 사용하는지를 상세히 설명해보도록 하겠다.

○ private

private 접근 제한자는 오직 선언된 클래스 내에서만 접근할 수 있다.

용도

  1. 캡슐화 : 내부 상태를 보호하고 외부에서 직접 접근하지 못하도록 함.
  2. 내부 구현 숨기기 : 클래스의 내부 로직이나 필드를 숨기고 외부에 노출하지 않음.

예시

public class Example {
    private int value; // 클래스 내부에서만 접근 가능
    
    private void doSomething() {
        // 클래스 내부에서만 호출 가능
    }
}

○ default

접근 제한자를 명시하지 않은 경우 기본 접근 수준으로, 같은 패키지 내에서만 접근할 수 있다.

용도

  1. 패키지 내 협력 : 같은 패키지 내의 클래스들이 협력할 수 있도록 함.
  2. 모듈화 : 클래스나 멤버를 외부 패키지에 노출하지 않고 패키지 내부에서만 사용하도록 함.

예시

class Example {
    int value; // 같은 패키지 내에서만 접근 가능
    
    void doSomething() {
        // 같은 패키지 내에서만 호출 가능
    }
}

○ protected

protected 접근 제한자는 같은 패키지 내의 클래스 또는 다른 패키지에 있는 하위 클래스에서 접근할 수 있다.

용도

  1. 상속 관계 : 하위 클래스가 상위 클래스의 멤버에 접근할 수 있도록 함.
  2. 확장성 : 하위 클래스에서 상위 클래스의 기능을 재사용하거나 확장할 수 있도록 함.

예시

public class BaseClass {
    protected int value; // 같은 패키지 또는 하위 클래스에서 접근 가능
    
    protected void doSomething() {
        // 같은 패키지 또는 하위 클래스에서 호출 가능
    }
}

public class SubClass extends BaseClass {
    public void useBaseClass() {
        value = 10; // 상위 클래스의 protected 멤버에 접근 가능
        doSomething(); // 상위 클래스의 protected 메서드 호출 가능
    }
}

○ public

public 접근 제한자는 모든 클래스에서 접근할 수 있다.

용도

  1. 공개 API : 클래스, 메서드, 필드를 외부에 공개하여 사용할 수 있도록 함.
  2. 상호작용 : 다른 패키지나 모듈에서도 접근 가능하도록 함.

예시

public class Example {
    public int value; // 모든 클래스에서 접근 가능
    
    public void doSomething() {
        // 모든 클래스에서 호출 가능
    }
}

접근 제한자 요약 표

접근 제한자같은 클래스같은 패키지하위 클래스(다른 패키지)모든 클래스
privateOXXX
defaultOOXX
protectedOOOX
publicOOOO

선택 기준

  • private : 외부에 노출할 필요가 없는 클래스 내부의 세부 구현이나 데이터를 보호할 때 사용함.
  • default : 패키지 내부에서만 사용되는 멤버를 정의할 때 사용함. 주로 협력이 필요한 클래스들이 같은 패키지에 모여 있을 때 유용함.
  • protected : 상속받은 클래스가 부모 클래스의 멤버에 접근할 필요가 있을 때 사용함. 같은 패키지 내에서도 접근이 가능하기 때문에, 패키지 내 협력도 지원 O
  • public : 외부에서 접근이 필요한 멤버를 정의할 때 사용함. 외부 API를 제공하거나 다른 모듈과 상호작용할 때 주로 사용함.

접근 제한자를 적절히 사용하면 코드의 캡슐화, 정보 은닉, 모듈화, 확장성을 높일 수 있다. 각 접근 제한자의 특성과 용도를 이해하고 상황에 맞게 사용하는 것이 중요하니 꼭 기억해두자!

profile
백엔드 지망 학부생

0개의 댓글