제어자(modifier)는 클래스, 변수 또는 메서드의 선언부에 함께 사용되어 부가적인 의미를 부여한다.
접근 제어자 : public, protected, default, private
그 외: static, final, native, transient, synchronized, volatile, strictfp
멤버 변수
-모든 인스턴스에 공통적으로 사용되는 클래스변수가 된다.
-클래스변수는 인스턴스를 생성하지 않고도 사용 가능하다.
-클래스가 메모리에 로드될 때 생성된다.
2.메서드
-인스턴스를 생성하지 않고도 호출이 가능한 static 메서드가 된다.
-static메서드 내에서는 인스턴스멤버들을 직접 사용할 수 없다,
변수에 사용되면 값을 변경할 수 없는 상수가 되며, 메서드에 사용되면 오버라이딩을 할 수 없게 되고, 클래스에 사용되면 자신을 확장하는 자손클래스를 정의하지 못하게 된다.
final이 붙은 변수는 상수이므로 일반적으로 선언과 초기화를 동시에 하지만, 인스턴스 변수의 경우 생성자에서 초기화 되도록 할 수 있다.
클래스
클래스 내에 추상 메서드가 선언되어 있음을 의미한다.
메서드
선언부만 작성하고 구현부는 작성하지 않은 추상 메서드임을 알린다.
추상 클래스는 아직 완성되지 않은 메서드가 존재하는 '미완성 설계도'이므로 인스턴스를 생성할 수 없다.
접근 제어자가 사용될 수 있는 곳 - 클래스, 멤버변수, 메서드, 생성자
- private: 같은 클래스 내에서만 접근이 가능하다
- default: 같은 패키지 내에서만 접근이 가능하다
- protected: 같은 패키지 내에서, 그리고 다른 패키지의 자손클래스에서 접근이 가능하다
- public: 접근 제한이 전혀 없다.
참고로 protected는 패키지에 관계없이 상속관계에 있는 자손클래스에서 접근할 수 있도록 하는 것이 제한목적이지만, 같은 패키지 내에서도 접근이 가능하다. 그래서 protected가 default보다 접근범위가 넓다.