제어자란 클래스와 클래스 멤버의 선언 시 사용하여 부가적인 의미를 부여하는 키워드를 의미한다.
자바에서 접근자는 접근 제어자와 기타 제어자로 구분한다.
public
, default
, protected
, private
static
, final
, abstract
, natvie
, transient
, synchronized
, volatile
, strictfp
기타 제어자는 경우에 따라 여러 개를 함께 사용할 수 있지만, 접근 제어자는 두 개 이상 같이 사용할 수 없다.
접근 제어자란 클래스 외부에서의 직접적인 접근을 제한하는 것이다.
자바에서는 정보 은닉을 위해 접근 제어자라는 기능을 사용한다.
접근 제어자를 사용하면 클래스 외부에서의 직접적인 접근을 허용하지 않는 멤버를 설정하여 정보 은닉을 구체화할 수 있다.
이는 객체지향 개념에서 캡슐화(Encapsulation)
라고 한다.
접근 제어자는 클래스
, 멤버변수
, 메서드
, 생성자
에 사용될 수 있다.
public
과 default
만 사용 가능하다. 최상위 클래스의 경우 외부에서 접근하지 못하는 클래스는 의미가 없기 때문이다. 단, 내부 클래스의 경우는 모든 접근 제어자를 사용할 수 있다.public
으로 선언된 클래스 멤버는 외부로 공개된다. 즉, 접근 제한이 없어 해당 객체를 사용하는 프로그램 어디에서나 접근이 가능한다.
자바 프로그램은 public
메소드를 통해서만 해당 객체의 private
객체에 접근할 수 있다.
따라서, public
메소드는 private
멤버와 자바 프로그램 사이의 인터페이스 역할을 수행한다.
protected
로 선언된 클래스 멤버는 같은 패키지 내의 클래스 혹은 자신을 상속한 자식 클래스에서 접근이 가능한다. 같은 패키지의 자식 클래스뿐만 아니라 다른 패키지의 자식 클래스에서도 접근이 가능한다.
default
는 클래스 멤버의 접근 제어 기본값이다. 접근 제어자를 생략했을 때 자동으로 default
로 선언되며, 같은 패키지 내에서만 접근이 가능하다.
private
으로 선언된 클래스 멤버는 같은 클래스 내에서만 접근이 가능하다.
static
제어자는 '공통적인' 의미이며, 멤버변수
, 메서드
, 초기화 블록
에 사용할 수 있다.
static 제어자로 선언되면 다음과 같은 특징을 가진다.
final
제어자는 '변경할 수 없다'는 의미로 사용된다.
abstract
제어자는 '추상적인' 의미로 사용된다.
[참고]