본문으로 바로가기

[JAVA] 접근제어자 (Access Modifier)

category Helloworld!/JAVA 2016. 6. 8. 17:07

1. 접근제어자

- 접근제어자는 멤버 또는 클래스에 사용되어 해당하는 멤버 또는 클래스를 외부에서 접근하지 못하도록 제한하는 역할을 함

- 접근제어자는 생략가능하며 생략했을 때는 자동으로 default 임을 뜻하게 된다. 따라서 default 일경우에는 접근제어자를 지정하지 않는다.

- 접근제어자가 사용될 수 있는 곳 : 클래스, 멤버변수, 메서드, 생성자

1) private : 같은 클래스 내에서만 접근 가능

2) default : 같은 패키지 내에서만 접근 가능

3) protected : 같은 패키지 내에서, 그리고 다른 패키지의 자손 클래스에서 접근 가능

4) public : 접근 제한이 전혀 없다.


제어자 

같은 클래스

같은 패키지 

자손 클래스 

 전체

 public

 

 

 

 

 protected

 

 

 

 

 default

 

 

 

 

 private

 

 

 

 


- 접근 범위 : private < default < protected < public 순으로 보다 많은 접근을 허용한다


대상 

사용가능한 접근 제어자 

클래스 

 public, (default) 

메서드 

 public, protected, (default), private 

멤버변수 

지역변수 

없음 


2. 접근 제어자를 이용한 캡슐화

- 접근 제어자를 사용하는 이유는 클래스의 내부에 선언된 데이터를 보호하기 위해서이다. 데이터가 유효한 값을 유지하도록 또는 비밀번호와 같은 데이터를 외부에서 함부로 변경하지 못하도록 하기 위해서는 외부로부터의 접근을 제한하는 것이 필요하다

- 이것을 데이터 감추기라고 하며 객체지향개념에선 캡슐화(encapsulation)이라 한다.


3. 제어자의 조합

- 대상에 따라 사용할 수 있는 제어자


대상 

사용가능한 접근 제어자 

클래스 

 public, (default), final, abstract

메서드 

 모든 접근제어자, final, abstract, static

멤버변수 

 모든 접근제어자, final, static

지역변수 

 final


- 제어자 조합해서 사용할 때 주의할 사항

1) 메서드에 staticabstract를 함께 사용할 수 없다.
: static 메서드는 몸통이 있는 메서드에만 사용할 수 있기 때문
2) 클래스에 abstractfinal을 동시에 사용할 수 없다.
:클래스에 사용되는 final은 클래스를 확장할 수 없다는 의미이고, abstract는 상속을 통해서 완성되어야 한다는 의미이므로 서로 모순되기 때문이다.
3) abstract메서드의 접근 제어자가 private일 수 없다.
: abstract메서드는 자손클래스에서 구현하기 위해 접근해야 하기 때문이다.
4) 메서드에 private와 final을 같이 사용할 필요는 없다
: 접근 제어자가 private인 메서드는 오버라이딩될 수 없기 때문이다. 이 둘 중 하나만 사용해도 의미가 충분하다.