디자인 패턴
-설계 문제에 대한 해답을 문서화 하기 위해 고안된 방법
-소프트웨어 개발 과정에서 자주 나타나는 과제를 해결하기 위한 방법
-패턴은 특정한 상황에서 구조적인 문제를 해결하는 방식을 설명해 준다
-디자인 패턴은 일반적으로 대규모 프로그램 개발에 적합 하다.
-각 디자인 패턴이 유용한 상황에 대해 잘 알아야 한다.
-패턴은 절대적이지 않다.(상황에 맞게 유연하게 변형이 가능 하다.
MVC 패턴
MVC Pattern 은 Model View Controller의 약자로 애플리케이션을 세 가지의 역할로 구분한다
//# = protected / + = public / - = private / 기본값 = default
// 아래 어노테이션(@)은 특정 요청이 있을때 아래 클래스를 실행하라는 의미
// localhost:8080/01_Controller 요청이 왔을때web.xml 에서 welcomfile list 에 지정된 파일이 없으면 404에러가 난다.
// 하지만 아래 "/" 요청이 있으면 404가 나지 않고 아래 클래스를 실행 한다.
@WebServlet("/")
public class MainController extends HttpServlet {
//extends 는 상속한다는 키워드 이다.
// method = "get" 으로 요청한 경우 아래 메서드를 실행
//protected : 패키지를 벗어나려면 부모자식관계여야함
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
System.out.println("GET 방식 요청");
}
// method ="post" 로 요청한 경우 아래 메서드를 실행
// post 방식을 사용하기 위해서는 명시를 해야함 (기본값 get)
@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
System.out.println("POST 방식 요청");
}
- JAVA 에서는 다른 소스를 가져다 쓰기 위한 두가지 방법이 있다.
- 객체화(instance) 와 상속(inherit) 이다.
- 상속은 부모의 것을 내 것처럼 사용하는 개념 이다.
- 상속은 OOP 4대 특징 중 하나이다
//override 를 했다는 것은 이 메서드를 그대로 사용하지 않겠다는 의미
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
MyCar car = new MyCar();
String result ="";
//상속을 사용하면 하나의 클래스 객체화로 나머지 상속받은 메서드를 모두 사용 할 수 있다.
switch(action) {
case "start":
result = car.start();
break;
case "stop":
result = car.stop();
break;
case "run":
car.turbo = true;
result = car.run();
break;
case "test":
result = car.test();
break;
}
System.out.println(result);
//run() 이 마음에 안들어 수정해서 사용하고자 한다.
// 1. 완전히 다시 만든다.
/*
@Override
public String run() {
return "시속 150km 로 달린다.";
}
*/
// 2. 경우에 따라서 부모것을 사용할수도 내것을 사용할수도 있게 한다.(부모의 기능을 활용)
public boolean turbo = false;
@Override
public String run() {
if(turbo == false) {
return super.run(); // super 는 부모를 의미
}else {
return "시속 200km 로 달린다.";
}
}
//view 에 응답을 해주자
// 1. response 활용
// -sendRedirect 를 활용해 완전히 다른 페이지로 이동
// -out 객체를 이용해서 페이지를 다시 그리는 방법
// 2. request 활용
// -forward 를 활용해서 특정 페이지에 특정 데이터를 던져준다.
req.setAttribute("msg", result); //request 니까 보낼 값을 담을 수 있다.
RequestDispatcher dis = req.getRequestDispatcher("index.jsp");
dis.forward(req, resp); //전송
}
- override : 상속받은 메서드를 수정 하는 것
- final 이 붙은 메서드는 읽기전용(read only) 이므로 override가 불가능 하다.
- Abstract(추상화) : OOP 4대 특징 중 하나로 실체 간에 공통되는 특성을 추출 하고 불 필요한 정보를 제거해 단순화 시키는 것이다.
// 추상클래스에는 2개의 메서드가 존재 한다.
// 1. 일반 메서드(누군가 상속하면 그냥 자기것 처럼 사용하는 메서드)
public String jump(String job) {
return job+" 가 점프한다.";
}
// 2. 추상 메서드(몸체가 없는 메서드)
// 추상 클래스를 상속받는 클래스에게 강제로 오버라이드 하도록 한다.(규격)
public abstract String skill(String job);
public abstract String useItem(String job);
- 추상화를 사용 하는 이유 : 필수로 만들어야 하는 메서드들을 말로하는 것보다
특정 클래스를 상속받게 하는 것이 더 효과적이다.- 추상 클래스는 자식 이외에는 객체화 시킬 수 없다.