JAVA - 접근제어 지시자
- JAVA
- 2018. 1. 31. 22:16
접근제어 지시자
(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 |