제어자 (modifier)
- 클래스와 클래스의 멤버(멤버변수, 메서드)에 부가적인 의미를 부여한다. (like 형용사!)
- 하나의 대상에 여러 제어자를 같이 사용 가능하다. (단, 접근제어자는 하나만 사용)
접근제어자
- 접근제어자를 사용하는 이유
- 외부로부터 데이터를 보호하기 위해서 (getter/setter)
- 외부에는 불필요한(내부적으로만 사용하는) 부분을 감추기 위해서
public
protected
- 같은 패키지 내에서 접근 가능
- 다른 패키지의 자손 클래스에서 접근 가능
default
- 접근 제어자 생략 가능
- 같은 패키지 내에서만 접근 가능
private
| 제어자 | 같은클래스 | 같은패키지 | 자손클래스 | 전 체 |
|---|
| public | O | O | O | O |
| protected | O | O | O | |
| (default) | O | O | | |
| private | O | | | |
그 외 제어자
static (클래스의, 공통적인)
- 멤버변수에 붙었을 때의 의미
- 모든 인스턴스에 공통적으로 사용하는 클래스 변수가 됨 (iv → cv)
- 클래스 변수는 인스턴스를 생성하지 않고도 사용 가능
- 클래스가 메모리에 로드될 때 생성
- 메서드에 붙었을 때의 의미
- 인스턴스를 생성하지 않고도 호출이 가능한 static 메서드가 됨
- static 메서드 내에서는 인스턴스 멤버를 직접 사용할 수 없음
final (마지막의, 변경 불가한)
- 클래스에 붙었을 때의 의미
- 변경될 수 없는 클래스, 확장될 수 없는 클래스가 됨
- 다른 클래스의 조상이 될 수 없음
- Ex ) String, Math 클래스 등
- 메서드에 붙었을 때의 의미
- 변경될 수 없는 메서드
- 오버라이딩을 통해 재정의할 수 없음
abstract (추상의, 미완성의)
- 메서드에 붙었을 때의 의미
- 선언부만 작성하고 구현부는 작성하지 않은 추상메서드(미완성메서드)임