장삼의 착한코딩

[Java] 접근 제한자 본문

Java

[Java] 접근 제한자

wkdgusdn3 2015. 6. 16. 01:07

접근 제한자


Java에 접근 제한자는 private, default, protected, public 4가지가 있다.


free한 순서대로는 public > protected > default > private 순서이다.


private : 가장 엄격한 제한자로 선언된 멤버가 자신의 클래스 내부에서만 사용가능하다.

default : 제한자를 붙이지 않았을 때, package, none이라고도 부른다. 같은 package에서 사용가능 하며, 다른 package에서는 사용 가능하지 않다.

protected : 같은 package에서 사용가능하며, 다른 package에서는 상속만 가능하다.

public : 가장 free한 제한자이며, 모든 곳에서 사용할 수 있다.


 접근 제한자

같은 package

 다른 package

같은 class

다른 class

상속 class

다른 class

상속 class 

private

O

X

X

X

default

O

O

O

X

X

protected

O

O

O

X

O

public

O

O

O

O

O


default와 protected의 차이가 헷갈려서 찾아보았다. 차이점을 정리해 보았다.

default와 protected는 같은 package에서는 모든것이 허락된다. 하지만 다른 package 에서는 protected는 상속이 허락되지만, default는 상속이 허락되지 않는다. 아래에서 코드로 비교해보겠다.


protected

com.wkdgusdn3.b package에서 B class에 protected 접근 제한자로 b를 선언한다.

com.wkdgusdn3.a package에서 A class를 만든 후 B class를 상속한다.

A class 객체를 생성한 후 b에 접근하면 접근 가능한 것을 볼 수 있다. 이처럼 protected는 다른 package의 상속관계의 변수에 접근 가능하다.




default
com.wkdgusdn3.b package에서 B class에 default 접근 제한자로 b를 선언한다.
com.wkdgusdn3.a packaeg에서 A class를 만든 후 A class를 상속한다.
A class 객체를 생성한 후 b에 접근하면 이번에는 오류가 나는 것을 볼 수 있다. 오류 메세지를 확인해보면 "The field B.b is not visible" b가 보이지 않는다는 것을 확인할 수 있다. 이처럼 default 접근 제한자에서는 다른 package에서의 상속이 허락되지 않는다.









Comments