제어자(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일 경우 클래스 내부에서만 메서드를 호출할 수 있습니다.
'Programing Language > Java' 카테고리의 다른 글
[Java] 클래스 상속(Inheritance) (0) | 2022.06.27 |
---|---|
[Java] 정적 & 불변 제어자(Static & Final Modifier) (0) | 2022.06.27 |
[Java] 클래스의 캡슐화(Encapsulation) (0) | 2022.06.24 |
[Java] 자바 배열의 복사(Arrays Copy) (0) | 2022.06.20 |
[Java] 연산 우선 순위(Operation Priority) (0) | 2022.06.17 |