경우에 따라서는 객체의 필드를 외부에서 변경하거나 메서드를 호출할 수 없도록 막아야 할 필요가 있다. 중요한 필드와 메서드가 외부로 노출되지 않도록 해 객체의 무결성(결점이 없는 성질)을 유지하기 위해서이다. 자바는 이러한 기능을 구현하기 위해 접근 제한자(Access Modifier)를 사용한다. 접근 제한자는 다음 표처럼 나눌 수 있다.
| 접근 제한자 | 제한 대상 | 제한 범위 |
| public | 클래스, 필드, 생성자, 메서드 | 없음 |
| protected | 필드, 생성자, 메서드 | 같은 패키지이거나, 자식 객체 |
| (default) | 클래스, 필드, 생성자, 메서드 | 같은 패키지 |
| private | 필드, 생성자, 메서드 | 객체 내부 (클래스 내부) |
클래스의 접근 제한
클래스를 어디에서나 사용할 수 있는 것은 아니다. 클래스가 어떤 접근 제한을 갖느냐에 따라 사용 가능 여부가 결정된다. 클래스는 public과 default 접근 제한을 가질 수 있다.
[ public ] class 클래스 {...}
클래스를 선언할 때 public 접근 제한자를 생략했다면 클래스는 default 접근 제한을 가진다. 이 경우 클래스는 같은 패키지에서는 아무런 제한 없이 사용할 수 있지만 다른 패키지에서는 사용할 수 없게 된다.
클래스를 선언할 때 public 접근 제한자를 붙였다면 클래스는 public 접근 제한을 가진다. 이 경우 클래스는 같은 패키지뿐만 아니라 다른 패키지에서도 사용할 수 있다.
생성자의 접근 제한
객체를 생성하기 위해 생성자를 어디에서나 호출할 수 있는 것은 아니다. 생성자가 어떤 접근 제한을 갖느냐에 따라 호출 가능 여부가 결정된다. 생성자는 public, default, private 접근 제한을 가질 수 있다.
public class ClassName {
[ public | private ] ClassName() {...}
}
| 접근 제한자 | 생성자 | 설명 |
| public | 클래스 (...) | 모든 패키지에서 생성자 호출할 수 있다. = 모든 패키지에서 객체 생성 가능 |
| (default) | 클래스 (...) | 같은 패키지에서 생성자 호출할 수 있다. = 같은 패키지에서 객체 생성 가능 |
| private | 클래스 (...) | 클래스 내부에서만 생성자 호출할 수 있다. = 클래스 내부에서만 객체 생성 가능 |
필드와 메서드의 접근 제한
필드와 메서드도 어디에서나 읽고 호출할 수 있는 것은 아니고, 어떤 접근 제한을 갖느냐에 따라 호출 여부가 결정된다. 필드와 메서드는 public, default, private 접근 제한을 가질 수 있다.
[public | private] 타입 필드;
[public | private] 리턴 타입 메서드(...) {...}
| 접근 제한자 | 생성자 | 설명 |
| public | 필드 메서드 (...) |
모든 패키지에서 필드를 읽고 변경할 수 있다. 모든 패키지에서 메서드 호출할 수 있다. |
| (default) | 필드 메서드 (...) |
같은 패키지에서 필드를 읽고 변경할 수 있다. 같은 패키지에서 메서드 호출할 수 있다. |
| private | 필드 메서드 (...) |
클래스 내부에서만 필드를 읽고 변경할 수 있다. 클래스 내부에서만 메서드 호출할 수 있다. |
'Language > JAVA' 카테고리의 다른 글
| [JAVA] 싱글톤 패턴 (0) | 2024.09.04 |
|---|---|
| [JAVA] Getter와 Setter (0) | 2024.09.04 |
| [JAVA] import 문 (0) | 2024.09.04 |
| [JAVA] 패키지 (0) | 2024.09.04 |
| [JAVA] final 필드와 상수 (0) | 2024.09.04 |