Adventure Time - Finn 3
본문 바로가기
JAVA/개념정리

개발 패턴 : MVC var.1

by hyun9_9 2023. 12. 11.

mvc패턴을 사용 하지 않을 때

 

팀플할때 코드가 Test.java 파일 1개
1) 다른 사람이 코드 작성중일때
                                  -  실행 불가능
2) 다른 사람과의 동시간 형상(버전)관리가 불편함

 

 

프로그램 코딩을 M V C
                    Model
                       데이터와 관련된 작업을 처리하는 부분
                       "나는 항상 정확한 값을 받았다"
                       CRUD 구현

                   View
                       사용자와 관련된 작업을 처리하는 부분
                       "세상에 정상적인 사용자는 없다."
                       사용자의 모든 입력 값에 대해서  검사 == 유효성 검사
                       사용자에게 친절한 프로그램이 될수있도록 고민하는 역할
                        ==사용자 편의성 == UI/UX

                   Controller
                          M-V이어주는 역할
                         M과 V는 절대로 직접 결합되어서는 안됨! 절대 안됨!!
                         Controller를 통해서만 결합될 수 있습니다!!

 

하나의 프로그램에서           
                   Model,View,Controller 객체를 각각 1개씩만 사용함!!
                   (싱글톤 패턴 유지 가능)

 

 

mvc 예제  버전 1

[학생부 프로그램]

LP 

학생 추가
학생목록 출력
학생검색
학생정보 변경
학생삭제

 

UF 

1.추가
추가할 학생이름 입력 >> 홍길동
학생점수입력 >> 50
학생추가가 완료되었습니다!:D
2.목록
학생 목록
1001.xxx학생 xx점
3검색 
검색할 학생번호 입력 >> 1001
1001번 xxx학생 xx점
or
해당 번호의 학생은 없습니다
4. 변경 
학생번호 입력 >> 1001
학생점수 입력 >> 60
완료되었습니다
or
해당 번호의 학생은 없습니다
0.종료
종료

 

데이터

>>PK 1001

 

model

package model;

public class Student {
	private int num; // PK
	private String name;
	private int score;
	public Student(int num,String name,int score) {
		this.num=num;
		this.name=name;
		this.score=score;
	}
	public int getNum() {
		return num;
	}
	public void setNum(int num) {
		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() {
		return num + "번 " + name + "학생 " + score + "점";
	}
}
package model;

import java.util.ArrayList;

public class StudentModel {

	// CRRUD
	// 만약 메서드가 5개보다 적거나 많으면 어라...?? 이상감지해야함

	private ArrayList<Student> datas;

	public StudentModel() {
		datas=new ArrayList<Student>();
		datas.add(new Student(1001,"홍길동",50));
	}
	
	public ArrayList<Student> selectAll() {
		return datas;
	}
	public Student selectOne(int num) {
		for(Student data:datas) {
			if(data.getNum()==num) {
				return data;
			}
		}
		return null; // 검색할 학생이 없다면, null이 반환됨
	}
	// Q1. 성이 김씨인 학생 출력 -> selectAll()
	// Q2. 1002번 학생 출력 -> selectOne()
	// Q3. 1등 출력 -> selectAll() : 2명이상일수도있는 액션은 전부 All()

	public boolean insert(int num,String name,int score) {
		datas.add(new Student(num,name,score));
		System.out.println("   [로그] insert 메서드 수행");
		return true;
	}
	public boolean update(int num,int score) {
		// num 유효성은 데이터를 봐야지만 알수있음
		// score는 VIEW에서 체크가능
		boolean flag=false;
		int i;
		for(i=0;i<datas.size();i++) {
			if(datas.get(i).getNum()==num) {
				flag=true;
				break;
			}
		}
		if(!flag) {
			System.out.println("   [로그] update 메서드 실패");
			return false;
		}
		
		datas.get(i).setScore(score);
		System.out.println("   [로그] update 메서드 성공");
		return true;
	}
	public boolean delete(int num) {
		boolean flag=false;
		int i;
		for(i=0;i<datas.size();i++) {
			if(datas.get(i).getNum()==num) {
				flag=true;
				break;
			}
		}
		if(!flag) {
			System.out.println("   [로그] delete 메서드 실패");
			return false;
		}
		
		datas.remove(i);
		System.out.println("   [로그] delete 메서드 성공");
		return true;
	}

}

 

 

 

view

package view;

import java.util.ArrayList;
import java.util.Scanner;

import model.Student;

public class StudentView {
	private Scanner sc;
	public StudentView() {
		sc=new Scanner(System.in);
	}

	public void printMenu() {
		System.out.println("1. 추가");
		System.out.println("2. 목록");
		System.out.println("3. 검색");
		System.out.println("4. 변경");
		System.out.println("5. 삭제");
		System.out.println("0. 종료");
	}
	public int inputAction() {
		System.out.print("입력 >> ");
		int action=sc.nextInt();
		return action;
	}
	public String inputName() {
		System.out.print("학생이름입력 >> ");
		String name=sc.next();
		return name;
	}
	public int inputScore() {
		System.out.print("학생점수입력 >> ");
		int score=sc.nextInt();
		return score;
	}
	public int inputNum() {
		int num;
		while(true) {
			System.out.print("학생번호입력 >> ");
			num=sc.nextInt();
			if(1000<num&&num<2000) {
				break;
			}
			System.out.println("[로그] 번호입력이 올바르지않습니다...");
		}
		return num;
	}
	public void printTrue() {
		System.out.println("완료되었습니다! :D");
	}
	public void printFalse() {
		System.out.println("해당 번호의 학생은 없습니다...");
	}
	
	public void printStudentDatas(ArrayList<Student> datas) {
		System.out.println("==== 학 생 목 록 ====");
		for(Student data:datas) {
			System.out.println(data);
		}
		System.out.println("===================");
	}
	public void printStudentData(Student data) {
		System.out.println("==== 학 생 출 력 ====");
		System.out.println(data);
		System.out.println("===================");
	}
}

 

 

controller

package controller;

import java.util.ArrayList;

import model.Student;
import model.StudentModel;
import view.StudentView;

public class StudentCtrl {
	private StudentModel model;
	private StudentView view;
	public StudentCtrl() {
		this.model=new StudentModel();
		this.view=new StudentView();
	}

	public void startApp() {
		int PK=1002;
		while(true) {
			view.printMenu();
			int action=view.inputAction();
			if(action==0) {
				
				break;	
			}
			else if(action==1) {
				String name=view.inputName();
				int score=view.inputScore();
				boolean flag=model.insert(PK++, name, score);
				if(flag) {
					view.printTrue();
				}
				else {
					view.printFalse();
				}
			}
			else if(action==2) {
				ArrayList<Student> datas=model.selectAll();
				view.printStudentDatas(datas);
			}
			else if(action==3) {
				int num=view.inputNum();
				Student data=model.selectOne(num);
				if(data!=null) {
					view.printStudentData(data);
				}
				else {
					view.printFalse();
				}
			}
			else if(action==4) {
				int num=view.inputNum();
				int score=view.inputScore();
				boolean flag=model.update(num, score);
				if(flag) {
					view.printTrue();
				}
				else {
					view.printFalse();
				}
			}
			else if(action==5) {
				int num=view.inputNum();
				boolean flag=model.delete(num);
				if(flag) {
					view.printTrue();
				}
				else {
					view.printFalse();
				}
			}
		}
	}
}

 

 

client

public class Client {
	public static void main(String[] args) {
	
		StudentCtrl app=new StudentCtrl();//설치
		app.startApp();//실행
	}
}

 

 

 

 

 

 

 

 

 

'JAVA > 개념정리' 카테고리의 다른 글

웹크롤링  (0) 2023.12.26
MVC - var.2 , var.3  (0) 2023.12.12
예외처리  (0) 2023.12.11
private  (0) 2023.12.07
컬렉션 프레임 워크- 배열리스트(향상된 배열)  (0) 2023.12.07