JAVA

캡슐화

청춘고양이 2022. 11. 8. 00:36
반응형
package Ch09;

//캡슐화
//특정한 목적달성을 위해 필요한 여러 과정을 하나로 묶는작업
//ex)
//자동차 엔진 동작과정
//흡입 -> 압축 -> 폭발 -> 배기 과정을 거치게 되는데 
//이러한 동작과정을 묶어 하나의 캡슐로 처리할수 있다

//캡슐화는 정보은닉을 수반한다
//엔진의 동작과정중 흡입/압축 과정이 외부에 노출되어 순서가 변경된다거나 한다면
//자동차 자체에 큰 문제를 야기할 수있다
//캡슐화의 일부분이나 전부는 정보은닉(private)되어 묶여진다

//잘못된 캡슐화는 프로그램 전체에 영향을 주기 때문에
//작업 공정을 정확히 이해한 상태에서 처리한다


class C03Engine{
	//흡입
	private void Induction() {System.out.println("흡입!");}
	//압축
	private void Compress() {System.out.println("압축!");}
	//폭발
	private void Power() {System.out.println("폭발!");}
	//배기
	private void Exhaust() {System.out.println("배기!");}
	public void EngineStart() {
		Induction();//1
		Compress();//2
		Power();//3
		Exhaust();//4
	}
}
class C03Car{
	private C03Engine engine=new C03Engine();
	
	public void Carstart() {
		System.out.println("자동차 전원을 켭니다!");
		engine.EngineStart();
	}
}
public class C03CapsuleMain {
	public static void main(String[] args) {
		C03Car hong = new C03Car();
		hong.Carstart();
	}

}
package Ch09;

class Ramen{
	//1물을끓인다				- step1():void
	//2스프와 분말가루를 넣는다	- step2():void
	//3면을넣는다				- step3():void
	//4파,계란~				- step4():void
	private void step1() {System.out.println("1 물을끓인다");}
	private void step2() {System.out.println("2 스프와 분말가루를 넣는다");}
	private void step3() {System.out.println("3 면을넣는다");}
	private void step4() {System.out.println("4 파,계란~");}
	//캡슐화함수				+ recp():void
	public void recp() {
		step1();step2();step3();step4();
	}
}
class Tokbokki{
	//1물을끓인다				- step1():void
	//2고추장을푼다				- step2():void
	//3떡오뎅넣는다				- step3():void
	//4졸인다					- step4():void
	private void step1() {System.out.println("1물을끓인다");}
	private void step2() {System.out.println("2고추장을푼다");}
	private void step3() {System.out.println("3떡오뎅넣는다");}
	private void step4() {System.out.println("4졸인다");}
	//캡슐화함수				+ recp():void
	public void recp() {
		step1();step2();step3();step4();
	}
}
class Chef{
	//Ramen과 의존관계 형성
	//Tokbokki와 의존관계 형성
	private Ramen ramen = new Ramen();
	private Tokbokki tokbokki = new Tokbokki();

	//+CookRamen():void ->Ramen조리과정이 출력!
	public void CookRamen() {
		System.out.println("-----라면 요리를 시작합니다-----");
		ramen.recp();
		System.out.println("-----라면 요리가 끝났습니다-----");
	}
	//+CookTokbokki:void -> Tokbokki조리과정이 출력!	
	public void CookTokbokki() {
		System.out.println("-----떡볶이 요리를 시작합니다-----");
		tokbokki.recp();
		System.out.println("-----떡볶이 요리가 끝났습니다-----");
	}
}
public class C04CapsuleMain {
	public static void main(String[] args) {
		Chef hong = new Chef();
		hong.CookRamen();
		hong.CookTokbokki();

	}

}
반응형