Programing Language/Java

[Java] 접근 제어자(Access Modifier)

vinedpillar 2022. 6. 27. 01:35

제어자(modifier)

  • 제어자란 클래스와 클래스의 멤버 선언 시 부가적인 의미를 추가하는 예약어(키워드) 입니다.

  • 제어자는 크게 접근 제어자와 그 외 제어자로 나누어 볼 수 있습니다.
    • 접근 제어자: 클래스에서 생성되는 인스턴스의 값을 외부에서 변경하거나 호출할 수 있는 조건을 제어할 때 사용됩니다.
    • 기타 제어자: 클래스에 다양한 의미를 부여해주는 여러가지 예약어들입니다.
      (static, final, abstract, native, transient, synchronized, volatile, strictfp 등)

  • 제어자는 목적에 따라 다양한 예약어들을 조합하여 사용할 수도 있습니다.

 

 

 

 

접근 제어자(Access Modifier)

  • 접근 제어자는 public, protected, (default), private 총 4가지 종류가 있습니다.
    (default는 접근제어자를 입력하지 않은 상태를 의미)

  • 접근 제한자는 중복해서 쓸 수 없고, 한 가지만 정해서 사용할 수 있습니다.

접근제어자 제한 대상 제한 범위 접근 제한 정도
public 클래스, 필드, 컨스트럭터, 메서드 없음 아래로 갈수록 강화
|
|
|
protected 필드, 컨스트럭터, 메서드 같은 패키지나, 자식 클래스만 접근 가능
(default) 클래스, 필드, 컨스트럭터, 메서드 같은 패키지까지만 접근 가능
private 필드, 컨스트럭터, 메서드 클래스의 내부까지만 접근 가능

 

 

 

 

클래스의 접근 제어

  • 클래스 레벨에서 접근 제어자를 사용해 접근을 제어할 수 있습니다.

  • 클래스는 public과 default의 접근 제어자를 사용할 수 있습니다.
    • 접근제어자가 public일 경우 다른 패키지에서도 클래스의 인스턴스를 생성해 사용할 수 있습니다.
    • 접근제어자가 생략되었을 경우(default) 같은 패키지에서는 사용 가능하지만, 다른 패키지에서는 사용할 수 없습니다.

 

 

 

 

컨스트럭터의 접근 제어

  • 컨스트럭터 레벨에서 접근 제어자를 사용하여 사용 범위를 제어할 수 있습니다.

  • 컨스트럭터의 호출은 클래스 인스턴스의 생성과 동일하기 때문에 인스턴스의 생성을 제어하기 위해 활용될 수 있습니다.

  • 컨스트럭터는 모든 접근 제어자를 사용할 수 있습니다.
    • 접근제어자가 public일 경우 모든 패키지에서 컨스트럭터를 호출할 수 있습니다.
    • 접근제어자가 protected일 경우 같은 패키지이거나 자식 클래스일 때 컨스트럭터를 호출할 수 있습니다.
    • 접근제어자가 생략되었을 경우 같은 패키지에서만 컨스트럭터를 호출할 수 있습니다.
    • 접근제어자가 private일 경우 클래스 내부에서만 컨스트럭터를 호출할 수 있습니다.

 

 

 

 

필드의 접근 제어

  • 필드 레벨에서 접근 제어자를 사용하여 사용 범위를 제어할 수 있습니다.

  • 필드는 모든 접근 제어자를 사용할 수 있습니다.
    • 접근제어자가 public일 경우 모든 패키지에서 필드 데이터를 읽거나 변경할 수 있습니다.
    • 접근제어자가 protected일 경우 같은 패키지나 자식 클래스일 때 필드 데이터를 읽거나 변경할 수 있습니다.
    • 접근제어자가 생략되었을 경우 같은 패키지에서만 필드 데이터를 읽거나 변경할 수 있습니다.
    • 접근제어자가 private일 경우 클래스 내부에서만  필드 데이터를 읽거나 변경할 수 있습니다.

 

 

 

 

메서드의 접근 제어

  • 메서드 레벨에서 접근 제어자를 사용하여 사용 범위를 제어할 수 있습니다.

  • 메서드는 모든 접근 제어자를 사용할 수 있습니다.
    • 접근제어자가 public일 경우 모든 패키지에서 메서드를 호출할 수 있습니다.
    • 접근제어자가 protected일 경우 같은 패키지나 자식 클래스일 때 메서드를 호출할 수 있습니다.
    • 접근제어자가 생략되었을 경우 같은 패키지에서만 메서드를 호출할 수 있습니다.
    • 접근제어자가 private일 경우 클래스 내부에서만 메서드를 호출할 수 있습니다.