✅ 제어자 ✅ final ✅ abstract ✅ 접근 제어자 (public, protected, default, private)
(modifier)
클래스, 변수 또는 메서드의 선언부에 함께 사용되어 부가적인 의미를 부여한다.
접근 제어자 : public, protected, default, private
그 외 : static, final, abstract, native, transient, synchronized, volatile, strictfp
대상 | 의미 |
---|---|
static+멤버변수 | - 모든 인스턴스에 공통적으로 사용되는 클래스변수가 된다. |
- 클래스변수는 인스턴스를 생성하지 않고도 사용 가능하다. | |
- 클래스가 메모리에 로드될 때 생성된다. | |
static+메서드 | - 인스턴스를 생성하지 않고도 호출이 가능한 static 메서드가 된다. |
- static메서드 내에서는 인스턴스멤버들을 직접 사용할 수 없다. |
대상 | 의미 |
---|---|
클래스 | 변경될 수 없는 클래스, 확장될 수 없는 클래스가 된다. |
다른 클래스의 조상이 될 수 없다. | |
메서드 | 변경될 수 없는 메서드, 오버라이딩을 통해 재정의 될 수 없다. |
멤버, 지역 변수 | 값을 변경할 수 없는 상수가 된다. |
대상 | 의미 |
---|---|
클래스 | 클래스 내에 추상 메서드가 선언되어 있음을 의미한다. |
메서드 | 선언부만 작성하고 구현부는 작성하지 않은 추상 메서드임을 알린다. |
해당하는 멤버 또는 클래스를 외부에서 접근하지 못하도록 제한하는 역할을 한다.
제어자 | 같은 클래스 | 같은 패키지 | 자손 클래스 | 전체 |
---|---|---|---|---|
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 |
멤버변수 | public, protected, (default), private |
지역변수 | (없음) |
- 외부로부터 데이터를 보호하기 위해 (캡슐화)
- 내부적으로만 사용되는(외부에는 불필요한) 부분을 감추기 위해서 (private)
만일 메서드 하나를 변경해야 한다고 가정했을 때 메서드의 접근 제어자가 다음과 같다면 변경한 후에 테스트해야 하는 범위가
- 메서드에 static과 abstract를 함께 사용할 수 없다.
: static 메서드는 몸통이 있는 메서드에만 사용 가능- 클래스에 abstract와 final을 동시에 사용할 수 없다.
: fianl은 클래스를 확장할 수 없다, abstract는 상속을 통해 완성되므로 서로 모순- abstract 메서드의 접근 제어자가 private일 수 없다.
: abstract 메서드는 자손클래스에서 구현해야 하는데 접근 제어자가 private이면 자손클래스에서 접근할 수 없음- 메서드에 private과 final을 같이 사용할 필요 없다.
: private인 메서드는 오버라이딩될 수 없다. 둘 중 하나만 사용해도 의미가 충분하다.