아직 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의 호출로만 기능을 실행할 수 있게 되는 것이다.
'개발자노트' 카테고리의 다른 글
MVC 를 활용한 팀프로젝트 설계안 (0) | 2022.06.30 |
---|---|
[MVC] DB사용 없이 기초예제 (학생부+기능추가) (0) | 2022.06.29 |
개발의 구조적 패턴 [MVC] (0) | 2022.06.28 |
Resource 파일 복사하기 [buff]와 [FileIn/OutputStream] 응용 (0) | 2022.06.27 |
Resource의 문자들을 [.parseInt]를 사용하여 연산하기 (0) | 2022.06.27 |