자바와 객체지향 - 객체지향의 4대 특성 4. 캡슐화

YUNU·2023년 6월 30일
0

객체지향

목록 보기
5/9
post-thumbnail

📘 자바와 객체지향


🟦 객체지향의 4대 특성( 캡슐화 )

🔷 캡슐화 : 정보은닉(Information Hiding)

외부에서 내부의 정보에 접근하거나 변경할 수 없도록 직접적인 접근을 제한
객체가 제공하는 필드와 메소드를 통해서만 접근이 가능

객체 멤버 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;
        
        //객체 참조 변수를 통해 정적 멤버에 접근은 가능
    }
}
profile
DDeo99

0개의 댓글