외부에서 내부의 정보에 접근하거나 변경할 수 없도록 직접적인 접근을 제한
객체가 제공하는 필드와 메소드를 통해서만 접근이 가능
객체 멤버 UML 표기법
- : private // 본인만 접근 가능
~ : default // 같은 패키지 내의 클래스에서 접근 가능
# : protected // 상속 or 같은 패키지 내의 클래스에서 접근 가능
+ : public // 모두가 접근 가능
⬇️ 예시 코드
package 캡슐화.01;
public class 동물 {
//객체 멤버
private int p;
[default] int d;
protected int pr;
public int pu;
//정적 멤버
satic private int P;
static [default] int D;
static protected int PR;
static public int PU;
void doSomething() {
//객체 멤버 접근
// d, pr ,pu 모두 같은 방법으로 접근 가능
p = 0;
this.p = 0;
//정적 맴버 접근
// D, PR, PU 모두 같은 방법으로 접근 가능
동물.P = 0;
P = 0;
this.P = 0;
}
static void doSSomething() {
//객체 생성하지 않으면 객체 멤버에 접근 불가
// D, PR, PU 모두 같은 방법으로 접근 가능
동물.P = 0;
P = 0;
//객체 생성 후에 객체 참조 변수 통해서 객체 멤버에 접근 가능
동물 dm = new 동물();
dm.p = 0;
dm.d = 0;
dm.pr = 0;
dm. pu = 0;
//객체 참조 변수 통해서 정적 멤버에 접근은 가능
// D, PR, PU 모두 같은 방법으로 접근 가능
dm.P = 0;
}
}
---------------------------------------------------------------
package 캡슐화.01;
public class 판다 extends 동물 {
void doSomething() {
//객체 멤버 접근
// p는 접근 불가
// d, pr, pu는 접근 가능
d = 0;
this.d = 0;
//정적 멤버 접근
// P는 접근 불가
// D, PR, PU는 접근 가능
동물.D = 0;
D = 0;
this.D = 0;
//상속받지 않았다면 객체 멤버는 객체 생성 후에 접근 가능 (private 제외)
//ex : 동물 dm = new 동물();
// dm.d = 0;
}
static void doSSomething() {
//객체 멤버는 객체 생성 후에 객체 참조 변수 통해서 접근 가능
//private는 접근 불가
//d, pr, pu는 접근 가능
//상속받지 않았다면 동물 dm = new 동물(); 사용
판다 pd = new 판다();
pd.d = 0;
//정적 멤버 접근
//private는 접근 불가
//D, PR, PU는 접근 가능
동물.D = 0;
D = 0;
this.D = 0;
//객체 참조 변수를 통해 정적 멤버에 접근은 가능
}
}
---------------------------------------------------------------
package 캡슐화.02;
public class 강아지 extends 동물 {
void doSomething() {
//객체 멤버 접근
// p, d는 접근 불가
// pr, pu는 접근 가능
pr = 0;
this.pr = 0;
//정적 멤버 접근
// P, D는 접근 불가
// PR, PU는 접근 가능
동물.PR = 0;
PR = 0;
this.PR = 0;
//상속받지 않았다면 객체 멤버는 객체 생성 후에 접근 가능 (public만 가능)
//ex : 동물 dm = new 동물();
// dm.pu = 0;
}
static void doSSomething() {
//객체 멤버는 객체 생성 후에 객체 참조 변수 통해서 접근 가능
//private, default는 접근 불가
//protected, public은 접근 가능
//상속받지 않았다면 동물 dm = new 동물(); 사용 (public만 접근 가능)
강아지 gaz = new 강아지();
gaz.pr = 0;
gaz.pu = 0;
//정적 멤버 접근
//private, default는 접근 불가
//protected, public은 접근 가능
동물.PR = 0;
PR = 0;
this.PR = 0;
//객체 참조 변수를 통해 정적 멤버에 접근은 가능
}
}