본문 바로가기
JAVA

day15) MVC패턴 기본구조

by code_learner 2022. 1. 14.

매우 가벼운 프로젝트가 아닌이상 개발은 협업이 기본이다. 이럴 때 각자가 맡은 역할을 순서에 따라 개발하게 되면 많은 시간이 필요하게 된다. 따라서 동시적으로 개발하는 형태가 필요한데 가장 대표적인 형태가 MVC(Model-View-Controller)패턴이다. 

 

MVC패턴은 비지니스로직과 사용자 인터페이스 요소들을 분리시켜 서로 영향없이 개발하기 수월하다는 장점을 가진다.

 

출처: https://velog.io/@junhyeok/MVCModel-View-Controller

사용자가 입력을 담당하는 View를 통해 요청을 보내면 해당 요청을 Controller가 받고, ControllerModel을 통해 데이터를 가져오고, 가져온 데이터를 제어하여 View가 사용자에게 전달한다.

 

[Model]

Model은 어플리케이션이 무엇을 할 것인지 정의한다. 데이터 저장소(DB)와 연동하여 데이터를 Java객체로 가져오고(주로 VO클래스) 사용자가 입력한 데이터나 사용자에게 출력할 데이터를 처리하는 비지니스 메서드(CRUD)들을 가진다(주로 DAO클래스). 

public class Machine {
	//VO역할
	private String name;
	private int cnt;
	private int price;
	
	public String getName() {
		return name;
	}
	public void setName(String name) {
		this.name = name;
	}
	public int getCnt() {
		return cnt;
	}
	public void setCnt(int cnt) {
		this.cnt = cnt;
	}
	public int getPrice() {
		return price;
	}
	public void setPrice(int price) {
		this.price = price;
	}
    
    public void startModel() {
		this.name = "코카콜라";
		this.cnt = 2;
		this.price =1000;
	}
    
    //DAO역할
	//입력받은 문자열이 음료와 같다면 T
	//같지 않다면 F
	public boolean checkName(String name) {
		if(this.name.equals(name)) {
			return true;
		}
		return false;
	}
	
	
	public void buy(String name) {//제품이름 선택받음
		if(this.name.equals(name)) {
			if(cnt>=1) {
				this.cnt--;
			}else {
				System.out.println("재고가 없습니다.");
				return;
			}
		}else {
			System.out.println("해당제품이 없습니다.");
			return;
		}
		
		
	}
	
}

 

 

[View]

View는 사용자 공간으로 화면에 화면에 "무엇"인가를 보여주는 역할을 한다. 화면구성을 담당하여 모델이 처리한 데이터를 바탕으로 사용자에게 출력할 화면을 만들어 출력(UI)한다.

class MyException extends Exception{
	MyException(String message){
		super(message);
	}
}

public class MachineView {
	Scanner sc = new Scanner(System.in);
	public int action;
	

	public void Select(){
		while(true) {
			System.out.println("==안녕하세요 음료수 자판기 입니다.==");
			System.out.println("1. 구매");
			System.out.println("2. 재고확인");
			System.out.println("3. 가격확인");
			System.out.println("4. 종료");
			System.out.print(">>");

			try {
				int action = sc.nextInt();	
				if(action<1||action>4) {
					throw new MyException("유효하지 않은 입력입니다.");
				}
				this.action=action;//유효성 검사가끝난다면 일반변수 action을 멤버변수 action에 대입
				break;
			}catch (MyException e) {
				System.out.println("예외발생: "+e.getMessage());
			}catch(InputMismatchException e) {
				sc.nextLine();
				System.out.println("예외발생: 타입확인!");
			}catch (Exception e) {
				e.printStackTrace();
			}

		}
	}
	public String buy() {
		System.out.print("구매하고자 하는 음료입력: ");
		String name =sc.next();
		return name;
	}

	public void showCnt(int cnt, String name) {
		System.out.println(name+"는 "+cnt+"개 남았습니다.");
	}

	public void showPrice(int price, String name) {
		System.out.println(name+"는 "+price+"원 입니다.");
	}
	public void reAction() {
		System.out.println("유효하지않은 입력입니다.");
	}
	
	public void endView() {
		for (int i = 0; i < 5; i++) {
			System.out.println("☆★☆★☆★");
			try {
				Thread.sleep(500);
			} catch (Exception e) {
				// TODO: handle exception
			}
		}
	}
}

 

 

[Controller]

Controller는 Model과 View로부터 데이터를 받아 어떻게 처리할지 알려주는 역할을 한다. 클라이언트가 요청한 데이터를 전달하기 쉽게 가공하여 모델에 전달하기도 하고, Model이 업무수행을 완료하면 결과를 View에 전달하여 화면을 생성하도록 한다. 즉 Controller는 Model과 View의 조정자 역할을 담당한다.

public class MachineController {
	Machine model;
	MachineView view;

	public void startController() {
		model=new Machine();
		view = new MachineView();

		model.startModel();
	}

	public void startMachine() {
		while(true) {
			view.Select();
			if(view.action==1) {
				//구매
				model.buy(view.buy());//재고--
			}else if(view.action==2) {
				//재고확인
				view.showCnt(model.getCnt(),model.getName());
			}else if(view.action==3) {
				//가격확인
				view.showPrice(model.getPrice(),model.getName());
			}else if(view.action==4) {
				//종료
				view.endView();
				System.out.println("==로그:종료합니다==");
				break;
				//return; 을 써도 메서드 종료기 때문에 종료됨.
			}
		}
	}
}

 

 

 

 

 

https://medium.com/@jang.wangsu/%EB%94%94%EC%9E%90%EC%9D%B8%ED%8C%A8%ED%84%B4-mvc-%ED%8C%A8%ED%84%B4%EC%9D%B4%EB%9E%80-1d74fac6e256

 

[아키텍처 패턴] MVC 패턴이란?

MVC (Model-View-Controller) Pattern 은 기본적?(one of the most frequently used design patterns)으로 사용하는 패턴인 데.. 설명이 잘 되시나요?

medium.com

 

'JAVA' 카테고리의 다른 글

day18) JDBC를 이용한 DB, Eclipse 연동  (0) 2022.01.20
day17) [용어 정리 ] 컴포넌트, DBMS, JDBC  (0) 2022.01.19
day14) 파일 입출력  (0) 2022.01.14
day13) 예외처리  (0) 2022.01.13
day12) 컬렉션 프레임워크2  (0) 2022.01.11

댓글