onnnzeoz
article thumbnail

uri 뽑는부분

?class=useItem : parameter

08_self/common : uri

08_self/ : contextpath

 

전송부분

리퀘스트에다가 msg라는 이름으로 result변수값을 담는거야 그리고 dispatcher를 호출해서 index로 보내고

forward를 통해서 req와 resp를 전송하는거에요

왜 req, resp를 쓰는거임? jsp에선 내장객체로 되지만 얜 자바라서 request와 response를 받아와야함 그래서 doGet 메서드를 호출하는것

 

추상클래스는 자식만 객체화시킬 수 있음

추상화를 통해서 규격을 만들 수 있다 - >인터페이스와 추상화를 이용하면 모듈간의 결합도를 감소시킨다

 

인터페이스와 추상 클래스 차이점

  인터페이스 추상클래스
키워드 interface abstract
추상메서드 사용가능 (기본적으로 이거 사용함) abstract 추가시 사용가능 (추가하면 강제로 오버라이딩)
일반 메서드 dafault 키워드 추가시 가능 사용가능
사용개수 복수개의 인터페이스 구현가능 1개의 abstract class 상속가능
객체화 불가능( ->익명객체 활용함) 자식 객체만 가능
상속 필요한 부분만 implements하는 모듈구조
(다중 상속 가능)
순차적으로 extends 하는 위계구조

 

추상화 장점 (결합도)

응집도 높을수록좋고

결합도 낮을수록 좋다

결합도가 높으면 떼어냈을 때 손상이 심함

규격이 맞으면 결합도가 낮아짐 !

인터페이스와 추상화를 활용하면 규격이 만들어짐 -> 모듈의 결합도를 감소시킴 - > 분리했을 때 손상이 덜함 ex)같은 볼펜 뚜껑

활용안하면 유지보수할 때도 엄청 오래걸림, 우유 하나 바꾸려면 다 바꿔야되잖아 ->결합도가 높음 ex)사람 몸

 

405오류 : 허용되지 않은 메서드 -> doPost방식인데 meothod를 get으로 보내서

controller에는 post로 받겠다고 햇지만 get으로 보낼 때 뜬다

 

ctrl+shift+alt+l : vingsu라고 쓴 모든 자료 다 뜨고, 어디 부분인지, path 등등에 ㅐ해 다 알려줌

 

다형성polymorphism

같은 부모를 상속받은 클래스는 자식객체 부모와 같은 데이터 타입으로 들어갈 수 있다

장점 : 여러변수 할 필요없이 하나의 변수로만으로도 가능(ex방세아끼는것), 코드 중복 줄일 수 있다

 

ex1) 상속 다형성

다형성을 안했을 때

String param = req.getParameter("element");
		System.out.println(param);
		String msg = "";
		
		switch (param) {
		
		case "fire":
			Fire fire = new Fire();
			msg = fire.casting();
			break;
			
		case "ice":
			Ice ice = new Ice();
			msg=ice.casting();
			break;
			
		case "light":
			Light light = new Light();
			msg=light.casting();
			break;

		}

다형성을 했을 때

		String param = req.getParameter("element");
		System.out.println(param);
		String msg = "";
		Spell spell = null;
		
		switch (param) {
		
		case "fire":
			spell = new Fire();
			break;
			
		case "ice":
			spell = new Ice();
			break;
			
		case "light":
			spell = new Light();
			break;

		}
        msg = spell.casting();

Spell spell = null; 을 추가해줘서 모든 model들을 대체해줬음

이 spell클래스는 당연 model 패키지에 넣어줘야함 

msg = spell.casting(); 결과값을 넣어준 msg 이 부분은 switch문 다 나와서 밖에다가 1번만 써줘도 됨

 

ex2) 구현 다형성

다형성 안했을 때

String vingsu = req.getParameter("vingsu");
		System.out.println(vingsu);
		
		String result = "";
		switch (vingsu) {
		case "redBean":
			RedbeanVingsu rv = new RedbeanVingsu();
			rv.iceFlake();
			rv.milk();
			rv.redBean();
			rv.jelly();
			result = "팥빙수가 완성되었습니다.";
		break;
		
		case "choco":
		 	ChocoVingsu cv = new ChocoVingsu();
		 	cv.iceFlake();
		 	cv.milk();
		 	cv.redBean();
		 	cv.jelly();
		 	cv.choco();
		 	result = "초코빙수가 완성되었습니다.";
		break;
		
		case "cookie":
			CookieVingsu ck = new CookieVingsu();
			ck.iceFlake();
			ck.milk();
			ck.redBean();
			ck.jelly();
			ck.cookie();
			result = "쿠키빙수가 완성되었습니다.";
		break;
		}

iceflake, milk, redbean 이런 부분들이 계속 반복하고 있음 이를 막기 위해 저 값들을 담은 Vingsu 인터페이스를 만들었음

그리고 그걸 각 모델들이 구현한 뒤, Vingsu vs = null로 불러오면 다형성 적용완

		String vingsu = req.getParameter("vingsu");
		System.out.println(vingsu);
		
		VingsuMachine vm = new VingsuMachine(vingsu);
		
		Vingsu vs = null;
		String result = "";
		switch (vingsu) {
		case "팥빙수":
			vs = new RedBeanVingsu();
			result = vm.makeVingsu(vs);
			break;
		case "초코빙수":
			vs = new ChocoVingsu();
			result = vm.makeVingsu(vs);
			break;
		case "쿠키빙수":
			vs = new CookieVingsu();
			result = vm.makeVingsu(vs);
			break;
			
		case "과일빙수":
			vs = new FruitVingsu();
			result = vm.makeVingsu(vs);
			break;
		}

 

매개변수, 변수, 필드 차이점

String name = ""; //클래스안에 있는 변수 = 필드
public VingsuMachine(String name) { //여기있는 String name은 매개변수
this.name = name;
}



profile

onnnzeoz

@onnnzeoz

비전공자의 개발 공부 일지입니다 💦 국비 풀스택 과정 수강중