Back-End (Web)/JAVA

[JAVA] 접근 제어자

JABHACK 2024. 11. 12. 14:55

접근 제어자

  • 클래스, 메서드, 변수 등의 접근 범위를 제한하는 키워드로, 외부에서 사용할 수 있는지 여부를 결정한다
  • 클래스, 맴버 변수, 메서드 생성자에 사용되고, 지정되어 있지 않으면 default로 지정된다.

1. public

  • 범위: 모든 클래스에서 접근 가능.
  • 사용처: 클래스, 메서드, 필드.
  • 설명: public으로 선언된 요소는 모든 클래스에서 접근할 수 있습니다. 프로젝트 내 어디서든지 사용 가능한 공개 멤버로 설정됩니다.

2. protected

  • 범위: 같은 패키지 내의 클래스나 자식 클래스에서 접근 가능.
  • 사용처: 메서드, 필드 (클래스에는 사용할 수 없음).
  • 설명: protected는 동일 패키지 내의 모든 클래스와 다른 패키지의 자식 클래스에서 접근할 수 있도록 허용합니다.

3. default (아무 접근 제어자도 명시하지 않은 경우)

  • 범위: 같은 패키지 내에서만 접근 가능.
  • 사용처: 클래스, 메서드, 필드.
  • 설명: 접근 제어자를 명시하지 않으면 패키지 전용(default) 접근 수준이 됩니다. 같은 패키지 내에서만 접근할 수 있으며, 패키지를 벗어나면 접근할 수 없습니다.

4. private

  • 범위: 같은 클래스 내에서만 접근 가능.
  • 사용처: 메서드, 필드 (클래스에는 사용할 수 없음).
  • 설명: private로 선언된 멤버는 해당 클래스 내에서만 접근할 수 있습니다. 외부에서는 접근할 수 없으므로 정보 은닉에 유용합니다.

 

< 접근 제어자 정리표 >

접근 제어자 같은 클래스 같은 패키지 (클래스 폴더) 자식 클래스 외부 클래스
public O O O O
protected O O O X
default O O X X
private O X X X

 

< 사용 가능한 접근 제어자  >

클래스 public, default
메서드 & 멤버 변수 public, protected, default, private
지역변수 없음

 

접근 제어자를 이용한 캡슐화 (은닉성)

  • 접근제어자는 클래스 내부에 선언된 데이터를 보호하기 위해서 사용합니다.
  • 유효한 값을 유지하도록, 함부로 변경하지 못하도록 접근을 제한하는 것이 필요합니다.

생성자의 접근 제어자

  • 생성자에 접근 제어자를 사용함으로 인스턴스의 생성을 제한할 수 있습니다.
  • 일반적으로 생성자의 접근 제어자는 클래스의 접근 제어자와 일치합니다.

 

 

 

+ 같은 패키지 내

src
├── packageA
│   └── Car.java
└── packageB
    └── Main.java

 

  • Car 클래스에 default 접근 제어자가 적용된 필드나 메서드는 packageA 내에서만 접근할 수 있습니다.
  • packageB에 있는 Main 클래스에서는 Car의 default 필드나 메서드에 접근할 수 없습니다.

 

'Back-End (Web) > JAVA' 카테고리의 다른 글

[JAVA] 클래스 간의 관계와 상속  (0) 2024.11.12
[JAVA] package와 import  (0) 2024.11.12
[JAVA] This와 This()  (0) 2024.11.12
[JAVA] 생성자  (1) 2024.11.12
[JAVA] 인스턴스 멤버와 클래스 멤버  (0) 2024.11.12