Java

[Java]접근지정자(Access Modifier)

MoZZANG 2022. 3. 7. 19:04

접근지정자란?

 

클래스와 클래스 사이 혹은 클래스의 맴버간의 접근을 제어하는 기능을 가진 한정자

접근지정자의 크기) 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