제어자란 클래스와 클래스 멤버의 선언 시 사용하여 부가적인 의미를 부여하는 키워드를 의미한다.
자바에서 접근자는 접근 제어자와 기타 제어자로 구분한다.
public, default, protected, privatestatic, final, abstract, natvie, transient, synchronized, volatile, strictfp기타 제어자는 경우에 따라 여러 개를 함께 사용할 수 있지만, 접근 제어자는 두 개 이상 같이 사용할 수 없다.
접근 제어자란 클래스 외부에서의 직접적인 접근을 제한하는 것이다.
자바에서는 정보 은닉을 위해 접근 제어자라는 기능을 사용한다.
접근 제어자를 사용하면 클래스 외부에서의 직접적인 접근을 허용하지 않는 멤버를 설정하여 정보 은닉을 구체화할 수 있다.
이는 객체지향 개념에서 캡슐화(Encapsulation)라고 한다.
접근 제어자는 클래스, 멤버변수, 메서드, 생성자 에 사용될 수 있다.
public과 default만 사용 가능하다. 최상위 클래스의 경우 외부에서 접근하지 못하는 클래스는 의미가 없기 때문이다. 단, 내부 클래스의 경우는 모든 접근 제어자를 사용할 수 있다.

public 으로 선언된 클래스 멤버는 외부로 공개된다. 즉, 접근 제한이 없어 해당 객체를 사용하는 프로그램 어디에서나 접근이 가능한다.
자바 프로그램은 public 메소드를 통해서만 해당 객체의 private 객체에 접근할 수 있다.
따라서, public 메소드는 private 멤버와 자바 프로그램 사이의 인터페이스 역할을 수행한다.
protected 로 선언된 클래스 멤버는 같은 패키지 내의 클래스 혹은 자신을 상속한 자식 클래스에서 접근이 가능한다. 같은 패키지의 자식 클래스뿐만 아니라 다른 패키지의 자식 클래스에서도 접근이 가능한다.
default 는 클래스 멤버의 접근 제어 기본값이다. 접근 제어자를 생략했을 때 자동으로 default 로 선언되며, 같은 패키지 내에서만 접근이 가능하다.
private 으로 선언된 클래스 멤버는 같은 클래스 내에서만 접근이 가능하다.
static 제어자는 '공통적인' 의미이며, 멤버변수, 메서드, 초기화 블록에 사용할 수 있다.
static 제어자로 선언되면 다음과 같은 특징을 가진다.


final 제어자는 '변경할 수 없다'는 의미로 사용된다.
abstract 제어자는 '추상적인' 의미로 사용된다.
[참고]