Java - 접근 제어자
Java에서 접근 제어자는 멤버 또는 클래스에 사용되어, 외부로부터의 접근을 제한한다. 하나의 대상에 여러 개의 제어자를 조합해서 사용할 수 있으나, 접근제어자는 단 하나만 사용할 수 있다.
접근 제어자를 사용하는 이유는 외부로부터 데이터를 보호하고, 외부에 불필요하거나 내부적으로만 사용되는 부분을 감추기 위해서이다.
제어자(modifier)란? 클래스, 변수, 메서드의 선언부에 사용되어 부가적인 의미를 부여한다. 제어자는 크게 접근 제어자와 그 외의 제어자로 나뉜다.
접근 제어자의 종류는 다음과 같다.
- public
- protected
- default
- private
그 외
- static
- final
- abstract
- native, transient, synchronized, volatile, strictfp
접근 허용 가능 범위
접근 허용 가능 범위 순서는 다음과 같다.
public > protected > default > private
- public : 접근 제한이 없음
- protected : 같은 패키지 혹은 다른 패키지의 자손 클래스에서 접근이 가능
- default : 같은 패키지 내에서만 접근이 가능
- private : 같은 클래스 내에서만 접근이 가능
접근 제어자의 조합
- 메서드에 static과 abstract를 함께 사용할 수 없다. static 메서드는 몸통이 있는 메서드에만 사용할 수 있기 때문이다.
- 클래스에 abstact와 final을 동시에 사용할 수 없다. 클래스에 사용되는 final은 클래스를 확장할 수 없다는 의미이고, abstract는 상속을 통해서 완성되어야 한다는 의미이므로 서로 모순되기 때문이다.
- abstract 메서드의 접근제어자가 private일 수 없다. abstract 메서드는 자손클래스에서 구현해주어야 하는데 접근 제어자가 private이면, 자손클래스에서 접근할 수 없기 때문이다.
- 메서드에 private과 final을 같이 사용할 필요는 없다. 접근 제어자가 private인 메서드는 오버라이딩될 수 없기 때문이다. 이 둘 중 하나만 사용해도 의미가 충분하다.
대상 | 사용가능한 제어자 |
---|
클래스 | public, (default), final, abstract |
메서드 | 모든 접근 제어자, final, abstract, static |
멤버변수 | 모든 접근 제어자, final, static |
지역변수 | final |
참조
Java의 정석 기초편 (남궁성 지음)