외부에서 데이터에 접근 가능한 범위를 정하는 것
접근 제한자 | 접근 가능 범위 |
---|---|
private | 본인 클래스 안에서만 접근 가능 |
(default) | 같은 패키지 안에서는 .연산자로 멤버 접근 가능 |
protected | 같은 패키지 안에서는 .연산자로 멤버 접근 가능, 단 상속 관계라면 접근가능함 |
public | 어디서든 . 연산자로 접근 가능 |
=> first.java는 같은 패키지 second.java는 다른 패키지에 있을 때 접근 가능 범위 알아보자
public class Main {
public static void main(String[] args) {
//같은 패키지의 클래스 객체 생성
First f = new First();
//f.a = 10; //에러 : private 멤버는 사용불가
f.b = 10;
f.c = 20;
f.d = 30;
f.aaa();
//다른 패키지 클래스
Second sec = new Second();
sec.d = 500; //public만 보임
//멤버함수 - 함수도 멤버에 대한 접근제한 영향 받음
sec.show();
}
}
public class First {
//서로다른 4가지 유형의 접근제한자 적용된 멤버변수 생성
private int a;
int b; //앞에 암것도 안써야 default
protected int c;
public int d;
//멤버함수
void aaa(){
//같은 클래스안에 있는 멤버변수들은 접근제한자와 상관없이 사용 가능
a=10;
b=20;
c=30;
d=40;
System.out.println(a);
System.out.println(b);
System.out.println(c);
System.out.println(d);
}
}
package aaa;
public class Second {
//서로다른 4가지 유형의 접근제한자 적용된 멤버변수 생성
private int a;
int b;
protected int c;
public int d;
public void show() { //다른 패키지일때 함수에 접근하려면 얘도 public으로 명시해야된다
a = 100;
b = 200;
c = 300;
d = 400;
System.out.println(a);
System.out.println(b);
System.out.println(c);
System.out.println(d);
}
}
자바의 특성중 은닉화를 위해 접근제한자가 필요하다
캡슐화가 깨지지 않기 위해서는 정보의 은닉화가 필요하다
은닉화를 하지않으면 아무데서나 데이터에 접근가능하게 되기때문에 캡슐화의 의미가 없어진다