JAVA - 접근제어 지시자

접근제어 지시자

(Access Control Specifiers)


private과 public

상황에 따라 지시자를 

잘 사용해야 된다

이들은 접근의 허용 범위를 제한하는

용도로 사용이 된다

JAVA가 제공하는 접근 제어 지시자는

private, public, protected 이렇게

세 가지이지만, 아무런 선언도 하지

않는 경우까지 포함하여 

총 네 가지의 형태의 접근제어

선언이 가능하다


private으로 선언되는 인스턴스 변수와 메소드는

선언된 클래스 내부에서만 접근이 가능하다

반면 public 으로 선언이 되면

public 라는 이름이 의미하듯이

어디서든 접근이 가능한 인스턴스 변수

및 메소드가 된다. 


이에 대한 예를 들어보겠다 


위 코드에서 클래스 AA의 변수 num은

private으로 선언되어있다.

따라서 클래스 BB내에서의 직접 접근은 할수없다

반면 AA의 메소드 setNum과 getNum은 public

으로 선언 되었기 때문에 BB클래스에서

접근이 가능하다.



default

인스턴스 변수와 인스턴스 메소드에는 아무런

접근제어 지시자도 선언하지 않을 수 있다.

이러한 형태의 선언을 dafault 선언 이라 한다

default로 선언된 인스턴수 변수 및 인스턴스 메소드는

동일 패키지 내에서의 접근을 허용한다. 

이에 대한 예를 하나 보겠다


위의 두 클래스는 aa 라는 이름의 동일 패키지로 묶여있다.

그런데 CC클래스의 init 메소드에는

BB클래스의 인스턴스 변수 num에 접근하는 코드가 있다.

컴파일은 무리없이 진행된다. 왜냐하면 변수 num은

default로 선언이 되었으므로 aa 패키지로

함께 묶여있는 모든 클래스의 접근을 허용하기

때문이다. 반면 변수 num이 private로 선언되었다면,

이 부분에서는 컴파일 에러가 발생한다.



protected

protected 는 상속의 개념이 빠지면

default와 동일하다

단 상속의 개념이 들어가면서 

default 보다는 접근하는데 있어서

유연함을 보인다. 그럼 default는 허용하지

않지만 protected는 허용을 하는 것이

무엇인지 보겠다


classBB는 classAA를 상속받았기 때문에

AA에서 선언한 num변수를 사용할수 있다

다음 BB클래스의 init 메소드를 보자.

이 메소드에서는 변수 num에 접근하는 코드가 있다

이 부분은 무리없이 컴파일 된다

왜냐하면 protected는 상속을 받는 클래스(class BB)의 접근을

허용하는 지시자 이기 때문이다.

그럼 변수 num이 private으로 선언되어도 접근이

가능할까? 이것의 대답은 "NO"이다

접근지시자의 접근 허용 여부는 인스턴스가

아니고 클래스를 기준으로 잡기 때문에

접근이 불가능하다.

따라서 private 로 선언된 변수 num 은 

class BB 입장에서는 외부에 존재하는

변수이기 때문에 접근이 불가능한것이다




'JAVA' 카테고리의 다른 글

JAVA - 문자열 토큰(Token)  (0) 2018.02.01
JAVA - static변수  (0) 2018.02.01
JAVA - 오버라이딩  (0) 2018.02.01
JAVA - 메소드 오버로딩  (0) 2018.02.01
JAVA - OOP란?  (0) 2018.01.31

댓글

Designed by JB FACTORY