1. 제어자란
- 클래스, 변수, 메서드의 선언부에 함께 사용됨
- 부가적인 의미를 부여함
- 하나의 대상에 대해서 여러 제어자를 조합하여 사용가능
(접근제어자는 한 개만 사용 가능)
- 종류
- 접근 제어자: public, protected, default, private
- 그 외: static, final, abstract, native, transient, synchronized, volatile, strictfp
2. static - 클래스의, 공통적인
- static이 붙은 멤버변수와 메서드, 초기화 블럭은 인스턴스가 아닌 클래스에 관계된 것이기 때문에 인스턴스를 생성하지 않고도 사용할 수 있음
- static이 사용될 수 있는 곳 -> 멤버변수, 메서드, 초기화 블럭
- 멤버변수
- 모든 인스턴스에 공통적으로 사용되는 클래스변수가 됨
- 메서드
- 인스턴스를 생성하지 않고도 호출이 가능한 static메서드가 됨
- static메서드 내에서는 인스턴스멤버들을 직접 사용할 수 없음
- static초기화 블럭은 주로 클래스변수를 초기화하는데 주료 사용 됨
3. final - 마지막의, 변경될 수 없는
- 사용되면 값을 변경할 수 없는 상수가 됨
- 메서드에 사용하면 변경할 수 없는 메서드가 되어 오버라이딩을 통해 재정의 될 수 없음
- 클래스에 사용되면 자손클래스를 정의하지 못하게 함
- final이 붙은 변수는 일반적으로 선언과 초기화를 동시에 하지만, 인스턴스변수의 경우 생성자에서 초기화 되도록 할 수 있음
4. abstract - 추상의, 미완성의
- 메서드의 선언부만 작성하고 실제 수행내용은 구현하지 않은 추상 메서드를 선언하는데 사용
- 클래스에 사용되어 클래스 내에 추상메서드가 존재한다는 것을 쉽게 알 수 있게 함
- 추상 클래스는 아직 완성되지 않은 메서드가 존재하므로 인스턴스를 생성할 수 없음
(추상 메서드가 없어도 추상 클래스로 만드는 경우도 있음 - 이런 경우 메서드의 선언부만 만들어놓고 상속 받아서 사용하게 만들어 놓은 클래스일 수 있음)
java의 정석 chapter7