접근지정자란?
클래스와 클래스 사이 혹은 클래스의 맴버간의 접근을 제어하는 기능을 가진 한정자
접근지정자의 크기) Public > protected > default > private 순이다.
여기서 default는 생략형 또는 package 접근지정자라고도 한다. 아무 접근지정자도 사용하지 않으면 default인 것이다.
▲ class앞에 아무것도 붙지 않았으므로 package 접근지정자가 생략되어 있는 것이다.
public을 사용하면 모든 클래스에서 접근가능하다.
private을 사용하면 자기 클래스안에서만 접근가능하며 다른 클래스에서는 접근 불가능하다.
접근지정자는 인터페이스와 클래스, 클래스의 모든 맴버에는 다 붙일 수 있다.
하지만 지역변수(메소드 안에서 선언한 변수 등)에는 붙일 수 없다.
또한, 클래스 앞에 붙일 수 있는 접근지정자는 public과 생략형만 붙일 수 있다.
▲ 위와 같이 class앞에서 private은 쓸 수 없다는 것이다.
class라는 것은 설계도인데 설계도를 공유해서 객체를 만들어내야지 private하게 사용하면 안되니까!
자 이제 클래스안에서 접근지정자를 이용해서 클래스 맴버들을 만들어 보자.
▲ 클래스 맴버에는 모든 접근지정자를 붙일 수 있다.
▲ 메소드 또한 클래스의 맴버이므로 모든 접근지정자를 사용할 수 있다.
private 메소드는 해당 클래스에서만 사용할 수 있기때문에 다른 클래스에서 직접적으로 호출할 수 없다. 따라서 public이 붙은 즉, 다른 클래스에서 접근이 가능한 메소드를 이용해서 간접적으로 호출할 수 있다.
자 이제 같은 패키지안 다른 클래스에서 tistoty의 맴버에 접근해보자.
▲ tistory2라는 다른 클래스에서 tistory클래스를 자료형으로 사용할 수 있다. tistory가 public접근지정자를 가졌기 때문이다.
▲ 위쪽에서 tistoty형으로 one이라는 인스턴스변수를 선언했고 이후 위 코드에서 메모리 생성까지 해주었다.
다른 클래스의 맴버에 접근하려면 해당 클래스를 자료형으로 하는 메모리까지 생성해야지 사용할 수 있다.
one.privateVar는 private이 붙은 맴버변수이므로 사용할 수없기때문에 에러가 난다.
one.privateMethod또한 privte이 붙은 메소드이므로 해당 클래스를 벗어나서는 직접적으로 사용할 수 없다.
만약 사용을 원한다면 pulic이 붙은 메소드내에서 호출하는 방식으로 간접적호출을 해야한다.
'Java' 카테고리의 다른 글
[Java]modifier part.2 (0) | 2022.03.07 |
---|---|
[Java]전역변수와 지역변수 & modifier (0) | 2022.03.07 |
[Java]Class - part.3 (0) | 2022.03.05 |
[Java]Class - part.2 (0) | 2022.03.04 |
[Java]Class - part.1 (0) | 2022.03.04 |