추상화(1)

coc·2023년 8월 22일
0

추상화(Abstract)는 OOP 의 4대 특징 중 하나 이다.

추상은 실체 간에 공통되는 특성을 추출 하고 불 필요한 정보를 제거해 단순화 시키는 것이다.

1. Encapsulation: 다른 사용자에게 데이터 입/출력을 제한 한다.

2. Inheritance: 나에게 없는 기능을 부모에게 받아서 내 것 처럼 쓴다.

1. 추상클래스 내용

- 추상클래스는 추상 메서드로 꼭 구현해야 하는 메서드 등의 규격을 만들 수 있다.

- 실체 클래스(concrete class) 는 추상 클래스(abstract class) 를 상속한다.

- 추상화 class 및 method 를 선언 하기 위해서는 abstract 라는 키워드를 붙여야 한다.

- 둘은 상속 관계 이기 때문에 추상화 클래스의 기능을 실체 클래스에서 사용 할 수 있다.

- 추상 메서드(abstract method) 를 통해 꼭 구현할 메서드를 override 할 수 있다.

- HttpServlet 은 어떤 규격을 잡기 위한 추상 클래스 였다.

- Http 통신에서는 최소 post 와 get 방식에 대해서는 대응 해 줘야 한다.

2. abstract method

- abstract method 는 형태만 있고,그 몸체는 없는 메서드를 말한다.

- abstract method 는 특정한 메서드를 강제로 override 해야 할 경우 설정 해 준다.

요약

1. 추상화는 공통되는 특징을 추출하여 단순화 시키는 작업이다.

2. 추상 클래스는 abstract 키워드를 사용 한다.

3. 추상 클래스는 자식 이외에는 객체화 시킬 수 없다.

4. 추상 클래스를 상속 받으면 추상 메서드를 강제로 override 하게 된다.

5. 이 과정을 통해 꼭 필요한 메서드를 만들어 규격화 시킬 수 있다.

3. interface

- Inter face 는 서로 다른 요소들의 접점을 의미 한다.

- 그리고 Interface 는 사용 방법을 정의 한다.

- 사용 방법은 곧 규격을 의미하기도 한다.

- Interface 도 추상화 메서드를 통해 공동 작업 시 규격을 잡아주는 역할을 한다.

- Interface 는 abstract class 와 차이점도 많지만 유사한 부분도 많다.

인터페이스 jsp(뷰)

<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
<script src="https://code.jquery.com/jquery-3.7.0.min.js"></script>
</head>
<body>

	액션 선택:
	<form>
	<select name = "action"> <!-- select 태그 -->
	<option value = "attack"> 공격</option>
	<option value = "defense"> 방어</option>
	<option value = "common">공통행동</option>
	</select>
	종류: 
	<select name ="cls">
	<option value = "nomal"> 일반 공격</option>
	<option value = "special">특수 공격</option>
	</select>
	<input type = "button" value = "전송" onclick="go()"/><!-- 전송 클릭 이벤트가 발생했을때 go를  -->
	</form>
	<!-- 4번째 확인: 보내는 값을 잘 받는가 (h3안에 있는 값이 바뀌면 set어트리뷰트 에있는 ""값을 바꿔 줘야한다)-->
	<h3>${result}</h3><!-- 컨틀롤에 있는 attribute를 이용해서 msg를 출력해준다  -->
</body>
<script>
var action = 'attack';//  초기화를 해준거임


//name 속성이 밸류값이 action이라고 한다
$('select[name="action"]').on('change',funtion({ //2. select의 name이 action을 chagnge를 시켜주면 콜백시켜준다
	var action = $(this).val(); // 3.당사자를 (val)가져와서  action에 담아준다 이벤트걸리는 당사자에게 객체를 넣어줌
	var content = ""; //아무것도 없는 값을 넣어주고
	if(action == 'attack'){
		content = '<option value ="nomal">일반 공격</option>'; // 쿼터는 자기가 구분해주기 //content는 화면에 출력시킨다
		content += '<option value ="special">특수 공격</option>'; //두문장을 넣어준다
	}else if (action == 'defense'){
		content = '<option value ="block">막기</option>';
		content += '<option value ="avoid">회피</option>';
	}else{
		content = '<option value = "useItem">아이템사용</option>';
		content += '<option value = "move">이동</option>';
		content += '<option value = "pickup">줍기</option>';
	}
	$('select[name="cls"]').html(content);// select의 name의 cls를 불러와서 html에 콘텐트를 출력해준다
	//html에 변경해준다  //html 태그와 태그사이에 콘텐트값을 담아줄거다
});

function go(){
	 $('form').attr('action',action);//attr=속성값 액션값은 위에 있는변수 액션이다 액션 속성을 액션으로 바꿔주고
	 $('from').submit();//파라미터에 보낸다
}
</script>
</html>

컨트롤

package kr.co.gudi.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.gudi.model.Character;

@WebServlet(urlPatterns= {"/attack","/defense","/common"})// 웹서브렛은 안(attack,defense,common등)에있는 걸 받아오는거다
public class Gamecontroller extends HttpServlet {

	
	@Override
	protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
	
	//1. 밑에있는 스트링 먼저 해야함	
		
	//uri:/08_multiex/common
		String uri = req.getRequestURI();
	//context path : 08_multiext
		String ctx = req.getContextPath(); 
	//sub : /common
		String sub = uri.substring(ctx.length());
		System.out.println("addr :" +sub);// 확인해보고 들어가야 하기 때문에 시스템 아웃 사용 1번째 확인(요청이 제대로 들어 왔는지?)
											
		
		String cls = req.getParameter("cls");
		System.out.println("param :"+cls);//2번째 확인(파라메터가 제대로 들어 왔는지?)
		
		
		Character ch = new Character();
		String msg = "";//model에서 실행한 메서드가 반환하는 값을 담는 함수
		
		switch (sub) {
		case "/attack":
			if(cls.equals("nomal")) {
				msg = ch.nomal();
			}else {
				msg = ch.special();
			}
			break;
			
		case "/defense":
			if(cls.equals("move")) {
				msg = ch.move();
	
			}else {
				msg = ch.useItem();
			}
			break;
			
			
		case "/common":
			if(cls.equals("move")) {
				msg = ch.move();
			}else if(cls.equals("pickup")){
				msg = ch.pickup();
			}else {
				msg = ch.useItem();
			}
			break;
			

		
		}
		System.out.println(msg);//3번째 확인 :model로 부터 반환된 값 확인
		
		req.setAttribute("result", msg);
		RequestDispatcher dis = req.getRequestDispatcher("index.jsp");
		dis.forward(req, resp);
	}

	
	
	
	

}
profile
시작

0개의 댓글