onnnzeoz
article thumbnail

추상화

공통적 특성 추출하고 불필요한 정보제거 -> 단순화시키는 것

추상화는 규격이다(공통되는것, 꼭 있어야하는것이기때문)

a,b,c클래스에서 공통되게 사용하는 메서드가 있다면 그것만 따로 빼서 모아놓은게 추상클래스

그리고 그걸 인지하려면 상속받아야함

 

doGet과 doPost 방식은 무조건 필요한 놈 -> 이런게 규격

 

추상 메서드 : 강제로 만들어야할 때 설정해줌

ex 게임에서 모든 직업에 skill()과 useItem()메서드를 강제로 구현해야만 하는 상황

이런걸 보고 꼭 필요한 메서드를 만들어 규격화시켰다고 하는거

 

실체클래스는 추상클래스를 상속한다 -> 추상화 클래스의 기능을 실체 클래스에서 사용가능

추상화 클래스 및 메서드를 선언하기 위해서는 abstract라는 키워드 붙여야 함

 

get방식은 이렇게 url에서 너가 뭘 선택했는지 알 수 있음 

post방식은 데이터를 body에 싣기 때문에 url에서 보이진 않음 하지만 클라이언트가 접근할 수는 있음

 

추상 메서드는 형태만 있고 몸체가 없다 ( {} 이게 없다는 뜻)

 

interface

구현받을 인터페이스 구성하고 오버라이드하고 오버라이드한 그 객체에 적절한 내용을 써준다

인터페이스는 껍데기라 구현이라고 표현한다

다중상속이 가능하다

특정 기능을 이용하기 위한 접점 역할을 한다

객체화가 불가능하다

추상화 메서드를 사용한다

특정 기능 사용에 대한 규격을 설정할 수 있다

 

더보기

이거 만드는 과정

package kr.co.web.controller;

import java.io.IOException;

import javax.servlet.RequestDispatcher;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import kr.co.web.model.Dealer;
import kr.co.web.model.Healer;
import kr.co.web.model.Tanker;

@WebServlet(urlPatterns = {"/use","/skill","/jump"})
public class MainController extends HttpServlet {

	@Override
	protected void doGet(HttpServletRequest req, HttpServletResponse resp) 
			throws ServletException, IOException {
		
		String job = req.getParameter("class");
		System.out.println(job);
		
		String uri = req.getRequestURI();
		String ctx = req.getContextPath();
		String addr = uri.substring(ctx.length());
		System.out.println(addr);
		
		String result = "";
		
		switch (job) {
			case "탱커":
				Tanker t = new Tanker();
				if(addr.equals("/use")) {
					result = t.useItem(job);
				}else if(addr.equals("/skill")) {
					result = t.skill(job);
				}else {
					result = t.jump(job);
				}
				break;
				
			case "딜러":
				Dealer d = new Dealer();
				if(addr.equals("/use")) {
					result = d.useItem(job);
				}else if(addr.equals("/skill")) {
					result = d.skill(job);
				}else {
					result = d.jump(job);
				}
				break;
				
			case "힐러":
				Healer h = new Healer();
				if(addr.equals("/use")) {
					result = h.useItem(job);
				}else if(addr.equals("/skill")) {
					result = h.skill(job);
				}else {
					result = h.jump(job);
				}
				break;
		}
		
		req.setAttribute("result", result);
		RequestDispatcher dis = req.getRequestDispatcher("index.jsp");
		dis.forward(req, resp);	

	}
	
	

}

http servlet 상속받아줘야되고 쉬프트 알트 s doget override 해주고 

@webservlet(url 넣어주기)

url이 여러개면 urlPatterns 에서 3개 받고

직업을 먼저 알아내기 위해 class값을 req.getParameter 를 통해 job 변수로 받고

console에 찍어보고

파라메터가 찍히는게 가장 중요해 

null값이면 이름이 매치가 안된다는거임

url에서 정보를 찾을거임

-> uri를 먼저 찾고 ContextPath 부분을 지울거야

req.getRequestURI();과 req.getContextPath를 통해 uri와 ctx에 변수를 넣어서 가져옴

ctx의 길이와 substring을 통해 앞부분만 구해서 또 addr 변수에 넣어줘

 

그다음 직업을 통해 스킬들을 찾을거니까 switch문을 통해 탱커,딜러,힐러 객체화도 진행해주고 

result 변수 하나 선언해서 

if문을 통해 addr이 use, skill, jump와 일치하는지 equal문으로 물어봐 그걸 result에 담아

switch문이 끝나면 result값을 view에전송할건데 request에 값을 담고 (RequestDispatcher  ids = req.getRequestDispatcher("index.jsp");

dis.forward(req,resp);

 

컨트롤러 역할 : 파라메터가 뭐야 - 이 모델을 실행시켜라 - 그 모델로부터 받아온 값을 request와 forward를 실어서 해당 클라이언트로 보내준다

 

서블릿매핑에서 유효하지 않은 url-pattern 에러 : url-pattern에서 에러가 난거

에러 메시지 시작 부터 계속 올려 거기서 에러 문구 읽어봐 모르겠으면 내려 또 한글 나오ㅕㅁㄴ 읽어봐 오류 해결해봐

profile

onnnzeoz

@onnnzeoz

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