클래스 자체를 접근 권한 제어자를 설정할 수 있으며 클래스에 들어가는 각 객체에 접근제어 관리자를 설정 할 수 있다.
public은 다른 패키지에서도 접근이 가능하다.
먼저 같은 패키지 안에서 접근권한을 살펴보자
package day13;
public class Access {
int data1 = 10;
public int data2 = 10;
protected int data3 = 10;
private int data4 = 10;
public int getData4() {
return data4;
}
public void setData4(int data4) {
this.data4 = data4;
}
}
여기서 Access라는 클래스를 만들었고 이 클래스 안에는 정수를 담는 data를 초기화 하였다.
각 data앞에는 접근 권한 제어자를 붙였으며 제어자가 없는 것은 default이다.
다음은 같은 패키지에서 다른 클래스에서의 접근이다.
package day13;
public class Access2 {
void function() {
Access a = new Access();
a.data1 = 30;
a.data2 = 40;
a.data3 = 70;
System.out.println(a.data1);
System.out.println(a.data2);
System.out.println(a.data3);
}
public static void main(String[] args) {
Access2 a = new Access2();
a.function();
}
}
위의 코드를 보면 다른 클래스인 Access2에서 메서드를 만들어 초기화 하여 메서드안에서 Access의 객체들을 가져와 쓸 뿐아니라 수정도 가능하다.
다음은 다른 패키지를 만들어 사용해보자
package access;
import day13.Access;
public class Access3 {
void function() {
Access a = new Access();
a.data2 = 30;
System.out.println(a.data2);
System.out.println(a.getData4());
}
public static void main(String[] args) {
Access3 a3 = new Access3();
a3.function();
}
}
다른 패키지를 만들어 다른 패키지의 클래스를 접근하려니 초기화 할때 import가 새로히 생겼으며 값또한 public 뿐이 가져올 수 없었다.
그리고 private는 getter로 간접적으로 가져올 수 있었다.
마지막으로 다음과 같이 클래스의 접근제어관리자를 정리 할 수 있겠다.
private는 getter와 setter로 가져 올 수 있다.
getter(): public 제어자를 붙여서 다른 클래스 혹은 패키지에서도
private 변수에 접근할 수 있도록 해준다.(데이터 가져오기)
setter() : public 제어자를 붙여서 다른 클래스 혹은 패키지에서도
private 변수에 변경할 수 있도록 해준다.