괴발개발

vingsumaker 추가 본문

BACK END/JAVA

vingsumaker 추가

dinoelll 2023. 3. 2. 22:58
public interface Vingsu { //** 인터페이스
	
	public default void  iceFlake(){
		System.out.println("갈아둔 얼음을 넣는다.");
        
        [+똑같이 syso로 우유를 넣 는다, 팥을 넣는다, 젤리를 넣는다, etc 임] 
		
 ㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡ인터페이스를 불러옴
 public class VingsuMachine {

	String name = "";

	public VingsuMachine(String name) {
		this.name = name;
		
	}
	//인터페이스를 구현받은 클래스는 인터페이스 데이터타입의 변수에 들어갈 수 있다.(다형성)
	
	
	public String makeVingsu(Vingsu vingsu) {
		
		vingsu.iceFlake();
		vingsu.mik();
		vingsu.redBean();
		vingsu.jelly();
		vingsu.etc();
		return name+ "가 완료 되었습니다."; -> 생성자에 name 한 이유
ㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡ
String vingsu = req.getParameter("vingsu");
VingsuMachine vm = new VingsuMachine(vingsu); -> 이름 넣으라 했으니까 이름 넣은것name
String result = "";//4) 위에 name이 반환하는 값이 있으니까 result에 담아주고		
        
		Vingsu vs = null;//2)다 넣을 수 있다고 하니까 인터페이스 Vingsu를 (객체화x)구현 한거임
		
		switch (vingsu) {
[방법1]		case "팥빙수":
			vs = new RedBeanVingsu();//3)
			result = vm.makeVingsu(vs);//1)원래는 vm.makeVingsu(vingsu)vingsu 데이터 타입에 뭘 넣어라
			                             + 그 vingsu는 구현한거 다 넣을 수 있음
			break;
[방법2]		case "초코빙수":
			result = vm.makeVingsu(new ChocoVingsu());

<순서>

 

String vingsu = req.getParameter("vingsu"); //1) 팥빙수같은 값빼오고

VingsuMachine vm = new VingsuMachine(vingsu);// 2)vingsu라는 변수값에 "팥빙수가

//들어가면서 VingsuMachine에 name 변수에 "팥빙수"가 들어가서 저장됨

vs = new RedBeanVingsu(); //3) 레드빈 빙수의 콘솔값을 사용할 수 있게 됐고

result = vm.makeVingsu(vs);//4) 아까 vm은 팥빙수가 name에 들어간거고 vm 자체는

// 빙수 머신이라는 클래스를 사용할 수 있게 된거니까 makeVingsu를 사용할 수 있게 된거임

// 그러면 아까 name 값에 저장되어있었기 때문에 name+"가 완료되었습니다." 가 실행된느거임

// 그리고 makeVingsu() 이 괄호 안에 있는 vs는

// 인터페이스를 구현받은 클래스는 다 들어갈 수 있는건데, vingsu라는 변수 RedBEanVingsu가 객체화된

//vs 를 넣을 수 있는 거임

//5) 그렇게 되고 makeVingsu에서 iceFlake 부터 순차적으로 실행이 되고

// 6) 받아둔 네임값을 반환하게 됨

// 7) 컨트롤러 입장에서는 (vm,.makeVingsu)는 result에 넣어주는거지

// 8) 결합도가 낮은것의 장점 : 이렇게 되면 우유를 멸균 우유로 바꿔도 그냥 바꿀 수 잇는 거임

Comments