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 |