일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
Tags
- 생성자
- 숫자 형식
- SQL
- DoitSQL
- 페이지분석
- Doit입문SQL
- dbms
- 웹브라우저 수용도
- 크롤링 오류
- 배열 3요소
- 숫자형식오류
- DoitSQL입문
- html
- R1C3
- 자바 오류
- 예외
- 자바 예외
- 자바
- DoIt
- 예제
- 함수
- HTML역사
- 우아한테크
- 웹 브라우저 전쟁
- 크롤링
- 함수 선언
- 배열 예제
- 데이터베이스
- 키-값 데이터베이스
- SQL입문
Archives
- Today
- Total
프로그래밍
[자바 기초] day15 : MVC 예제(학생부 프로그램) 본문
728x90
반응형
2023.05.23.화
학생부 프로그램
먼저 시작하기 전에 위와 같은 형태로 파일을 생성해주었다
StudentView.java
package view;
import java.util.ArrayList;
import java.util.InputMismatchException;
import java.util.Scanner;
import model.StudentVO;
public class StudentView {
private static final int maxMenuNum = 6;
private static Scanner sc = new Scanner(System.in);
// 높은 응집도 가진 코드
// 상수화 초기화
// 메뉴 안내
// 1. 학생 목록 출력
// 2. 학생 검색
// 3. 학생 정보 변경
public void printMenu() {
System.out.println("===학생부 프로그램===");
System.out.println("1. 학생 목록 출력");
System.out.println("2. 학생 검색");
System.out.println("3. 학생 정보 변경");
System.out.println("4. 학생 추가");
System.out.println("5. 학생 삭제");
System.out.println("6. 학생 ");
}
// 사용자의 입력을 저장하는 기능
public int getMenuNum() {
int menuNum;
while (true) {
try {
System.out.println("입력: ");
menuNum = sc.nextInt();
break;
} catch (InputMismatchException e) {
sc.nextLine();
System.out.println();
}
}
if (1 <= menuNum && menuNum <= 3) {
return menuNum;
}
return menuNum;
}
// 학생목록을 출력하는 기능
public void printStudentList(ArrayList<StudentVO> datas) {
System.out.println("===학생 목록 출력===");
for(StudentVO v:datas) {
System.out.println(v);
}
}
// 검색하는 학생의 정보를 출력하는 기능
public void printStudent(StudentVO data) {
System.out.println("===학생 출력===");
System.out.println(data);
}
// 사용자가 입력한 번호를 저장하는 기능
public int getStudentNum() {
System.out.println("학생 번호 입력: ");
int num = sc.nextInt();
return num;
}
// 사용자가 입력한 점수를 저장하는 기능
public int getStudentScore() {
System.out.println("학생 점수 입력: ");
int score = sc.nextInt();
return score;
}
// 변경완료를 안내해주는 기능
public void printInfo() {
System.out.println("학생정보변경완료!");
}
//학생 추가시 안내멘트
public void printInfo_C_Start() {
System.out.println("학생 추가를 시작합니다");
}
// 이름 입력 받기
public String getStudentName() {
System.out.println("이름 입력: ");
String name = sc.next();
return name;
}
// 학생 추가 완료를 안내해주는 기능
public void printInfo_C_End() {
System.out.println("학생 추가 완료");
}
// 학생 삭제시 안내멘트
public void printInfo_D_Start() {
System.out.println("학생 삭제를 시작합니다");
}
// 학생삭제 완료 안내 기능
public void printInfo_D_End() {
System.out.println("학생 추가 완료");
}
// 프로그램 종료 안내
public void printEnd() {
System.out.println("프로그램 종료...");
}
}
MVC 중에서 View를 담당하는 클래스로 main()을 동작시키는 것이 목표가 아니다
그러므로 main() 을 작성하지 않는다
View()는 사용자에게 무엇을 보여주고 받아올 것인지 생각하여야 한다
출력은 View의 담당이기 때문에 다른 파트에서 출력문이 존재하면 안된다
studentVO.java
package model;
// VO(value object)
public class StudentVO {
private int num;
private String name;
private int score;
StudentVO(int num, String name, int score) {
this.num = num;
this.name = name;
this.score = score;
System.out.println(this.name +"생성 완료");
}
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() {
// TODO Auto-generated method stub
return this.name + this.score;
}
}
VO는 Value Object의 준말로 데이커 값을 저장하는 곳이다
학생 멤버변수를 선언하고 객체를 생성하여 초기화 시켜주었다
StudentDAO.java
package model;
import java.util.ArrayList;
// DAO (data access object)
// CRUD 비즈니스 메서드
public class StudentDAO {
public ArrayList<StudentVO> datas;
private static int PK = 1001;
public StudentDAO() {
this.datas = new ArrayList<StudentVO>();
this.datas.add(new StudentVO(PK++, "홍길동", 85));
this.datas.add(new StudentVO(PK++, "아무무", 92));
this.datas.add(new StudentVO(PK++, "티모", 51));
}
// C
public void insert(String name, int score) {
this.datas.add(new StudentVO(PK++, name, score));
}
// R : 목록 출력
public ArrayList<StudentVO> selectAll() {
return this.datas;
}
// R :
public StudentVO selectOne(int num) { //PK를 받아서
for(StudentVO v: this.datas) {
if(v.getNum()==num) {
return v;
}
}
System.out.println("로그: model: StudentDAO: selectOne(): 반환할 학생이 없습니다");
return null; // 해당 PK 가진 학생이 없음
}
public void update(int num, int score) {
for(int i=0; i<this.datas.size(); i++) {
if(this.datas.get(i).getNum()==num) {
this.datas.get(i).setScore(score);
return;
}
}
System.out.println("로그: model: StudentDAO: selectOne(): 반환할 학생이 없습니다");
}
// D
public void delete(int num) {
for(int i=0; i<this.datas.size(); i++) {
if(this.datas.get(i).getNum()==num) {
this.datas.remove(i);
return;
}
}
System.out.println("로그: model: StudentDAO: selectOne(): 제거할 학생이 없습니다");
}
}
DAO는 Data Access Object의 준말로 실질적인 기능을 담당하는 곳이다
CRUD(비즈니스 메서드, 핵심로직)을 작성하는 곳이다
이때 insert. selectAll, selectOne, update, delete 를 제외하고 이름을 지을 수 없다
기능이 겹치는 문제는 오버라이딩으로 해결한다
StudentCtrl.java
package controller;
import java.util.ArrayList;
import model.StudentDAO;
import model.StudentVO;
import view.StudentView;
public class StudentCtrl {
private StudentView view;
private StudentDAO dao; //model
public StudentCtrl() {
this.view = new StudentView();
this.dao = new StudentDAO();
}
public void startApp() {
while(true) {
//사용자한테 메뉴 출력
view.printMenu();
// 사용자가 행동 입력받음
int menuNum = view.getMenuNum();
if(menuNum==1) {
ArrayList<StudentVO> datas = dao.selectAll(); // 학생 목록 데이터를 모델이 가져옴
view.printStudentList(datas); // 가져온 데이터를 뷰에게 넘겨줌
}
else if(menuNum==2) {
int num = view.getStudentNum();
StudentVO data = dao.selectOne(num);
view.printStudent(data);
}
else if(menuNum==3) {
int num =view.getStudentNum();
int score = view.getStudentScore();
dao.update(num, score);
view.printInfo();
}
else if(menuNum==4) {
view.printInfo_C_Start();
String name = view.getStudentName();
int score = view.getStudentScore();
dao.insert(name, score);
view.printInfo_C_End();
}
else if(menuNum==5) {
view.printInfo_D_Start();
int num = view.getStudentNum();
dao.delete(num);
view.printInfo();
}
else if(menuNum==6) {
view.printEnd();
break;
}
}
}
}
컨트롤러는 View와 Model, 사용자 사이에서 작동한다
서로 필요하고 원하는 것을 전달해주는 역할이다
client.java
package client;
import controller.StudentCtrl;
public class Client {
public static void main(String[] args) {
StudentCtrl app = new StudentCtrl();
app.startApp();
}
}
실제로 클라이언트 코드에는 많은 내용이 담겨있지 않다
728x90
반응형
'자바 > 자바 기초' 카테고리의 다른 글
[자바 기초] day17 : MVC 패턴(VO 두개 이상) (0) | 2023.05.30 |
---|---|
[자바 기초] day16 : MVC 패턴(오버라이딩) (0) | 2023.05.30 |
[자바 기초] day15 : MVC(Model, View, Controller) (0) | 2023.05.23 |
[자바 기초] day14 : 파일입출력 예제(사진 복사하기) (0) | 2023.05.22 |
[자바 기초] day14 : 파일입출력 (0) | 2023.05.22 |
Comments