본문 바로가기

개발자노트

[MVC] DB사용 없이 기초예제 (학생부)

아직 DB의 사용법을 몰라서 컬렉션 ArrayList로 DB역할을 해주고,

기초적인 코드를 이용해 MVC 구조패턴을 익힐 것이다.

package model;

// VO -> 벨류 오브젝트 , DB의 데이터를 -> Java
// 이름, 점수
// PK

public class StudentVO {
	private int num; // PK , 각 객체의 고유값
	private String name; // 이름 저장변수
	private int score; // 학생의 점수를 저장할 변수
	public int getNum() { // private처리 된 멤버변수를 호출하기 위한 get
		return num;
	}
	public void setNum(int num) { private처리 된 멤버변수를 호출하기 위한 set
		this.num = num;
	}
	public String getName() {
		return name;
	}
	public void setName(String name) {
		this.name = name;
	}
	public int getScore() {
		return score;
	}
	public void setScore(int score) {
		this.score = score;
	}
	@Override
	public String toString() { // 객체 호출 시 문자열 출력을 위한 toString
		return "StudentVO [num=" + num + ", name=" + name + ", score=" + score + "]";
	}

	// DB에서 Java로 데이터를 불러오는 것과같은 역할
	public void startModel() {
		this.name="아무무";
		this.num=1001;
		this.score=90;
	}
}

 

[Model]에서는 먼저 다른 클래스(View, Controller, Client) 에서 다루는 기본적인 정보들을 구현하였고,

 

package view;

import java.util.Scanner;

import model.StudentVO;

// 사용자의 흐름(User Flow)을 설계
public class StudentView {
	public int act; // 사용자의 입력값을 저장할변수
	private int startNum=1;
	private int endNum=2; // 기능이 추가된다면, 마지막 기능 번호로 변경할 것!
	
	public void startView() {
		 
		Scanner sc=new Scanner(System.in);
		while(true) {
		System.out.println("학생부 프로그램입니다.");
		System.out.println("1. 이름출력 2. 종료");
		System.out.println("입력) ");
		this.act=sc.nextInt();
		if(startNum<=act&&act<=endNum) { // 유효성 검사
			break;
		}
		System.out.println("번호 확인 후 다시 입력 해주세요.");
	}
}
	public void func(StudentVO vo) { // StudentVO의 것을 받아와야한다! 1번 누르면 나오는 화면
		System.out.println("학생이름: " + "★"+vo.getName()+"★"); // vo로부터 멤버변수들을 가져온다.
		
	}
	public void func2() {
		System.out.println("프로그램이 종료됩니다...");
	}
	public void func3() {
		System.out.print("프로그램이 종료됩니다");
		for(int i=0;i<5;i++) {
			System.out.print(".");
			try {
				Thread.sleep(1000); // 1000==1초
			} catch (InterruptedException e) { // 예외처리
				// TODO Auto-generated catch block
				e.printStackTrace();  //예상하지 못한 예외를 만났을 때 로그를 남긴다.
			}
		}
	}
}

 

[View] 에서는 사용자랑 맞닿아있는 부분을 담당하고 있어서, 사용자의 입.출력에 대한 것만을 다뤘으며,
사용자가 입력한 값에 대한 유효성 검사까지 진행하였다.

 

package controller;

import model.StudentVO; // 다른 패키지에 있는 것을 가져옴
import view.StudentView;

public class StudentController {
	StudentVO model; // model의 기능을 사용하기 위해 멤버변수화
	StudentView view; // view의 기능을 사용하기 위해 멤버변수화
	public void startController() {
		// 프로그램을 처음 수행
		// -> 수행에 필요한 리소스(자원)를 메모리에 적재(load)
		view = new StudentView(); // view 기능을 사용하기 위한 객체생성
		model = new StudentVO(); // model 기능을 사용하기 위한 객체생성
		
		model.startModel(); // DB에서 데이터 가져오기.. 로드의 한 과정
		
	}
	
	 public void startApp() {
		 while(true) { // 무한루프 생성
			 view.startView();
			 
			 if(view.act==1) {
				 view.func(model); // DB데이터가 인자로 필요한 상황
				 //DB의 데이터를 V파트로 옮기는것(인자로 전달하는 것)은
				 //C의 몫이다!
			 }
			 else if(view.act==2) { // 무한루프 종료조건
				 view.func2(); // 프로그램 종료 안내멘트
				 break;
			 }
		 }
	 }
	 
}

 

[Controller] 단계에서는 model과 view 의 기능들을 호출하여 view가 만들어 놓은 출력물을 출력해주고, 그에 맞는 데이터들을 model에서 매칭 시켜서 사용을 한다.

 

package client;

import controller.StudentController;

public class Client {

	public static void main(String[] args) {
		// 지금까지 만든 App을 수행시킬 공간
		// main()이 존재함
		StudentController app=new StudentController();
		app.startController();
		
		app.startApp();

	}

}

 

그리고 마지막으로 main()이 있는 Client 에서 프로그램을 실행시켜 줄 것인데, 이렇게 MVC과정이 잘 진행되었다면, 메인에서는 Controller의 호출로만 기능을 실행할 수 있게 되는 것이다.