매우 가벼운 프로젝트가 아닌이상 개발은 협업이 기본이다. 이럴 때 각자가 맡은 역할을 순서에 따라 개발하게 되면 많은 시간이 필요하게 된다. 따라서 동시적으로 개발하는 형태가 필요한데 가장 대표적인 형태가 MVC(Model-View-Controller)패턴이다.
MVC패턴은 비지니스로직과 사용자 인터페이스 요소들을 분리시켜 서로 영향없이 개발하기 수월하다는 장점을 가진다.
사용자가 입력을 담당하는 View를 통해 요청을 보내면 해당 요청을 Controller가 받고, Controller는 Model을 통해 데이터를 가져오고, 가져온 데이터를 제어하여 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; 을 써도 메서드 종료기 때문에 종료됨.
}
}
}
}
[아키텍처 패턴] 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 |
댓글