열심히 끝까지
디바이스 융합 자바(Java) day16 - MVC기본,자판기 프로그램 with MVC 본문
디바이스 융합 자바(Java) day16 - MVC기본,자판기 프로그램 with MVC
노유림 2022. 6. 28. 16:42[오늘 수업]
[MVC]
Model-------------------
DB 저장된 데이터
=> VO : 어떻게 Java 객체로 표현할 지
ex ) 재고 데이터
DBMS(Oracle, MySQL)
DBMS에 저장된 데이터를 Java단으로 불러오는 역할
=> DAO : CRUD(핵심로직, 비즈니스 메서드)
== 사용자에게 서비스(제공)되는 메서드
View-------------------
사용자 공간 : console, 브라우저, 웹 페이지
-> 화면 구성
-> 사용자가 입력한 모든 값에 대해서 유효성 검사
Model과 View를 직접 잇는 것은 유지보수에 대해 불리하다.
>> 양측이 다 불편해지는 상황 발생
>> 이 둘을 이어주는 친구 : Controller
Controller-------------
Model과 View를 연결하는 역할
>> 데이터 전반의 흐름을 잘 알아야 한다!!
-----------------------------------------------
>> 결합도가 낮아진다!!
: 유지보수 유리
: 에러가 발생하면 다 바꾸지 않아도
*결합도가 높다?
> 유지보수가 심하게 불리하다는 뜻
>> 응집도가 높아진다!!
* 응집도가 낮다?
> 결제 문제가 발생했을 때 다 바꿔야 하는 상황 발생
> 관련이 되어있는것 끼리 뭉쳐있으면 좋은데
> Model은 Model끼리, View는 View끼리 결합되어 있기에 유지보수 유리
>> ★유지보수가 용이한 코드란?
: "낮은 결합도", "높은 응집도" 를 의미
: Model은 Model끼리, View는 View끼리 결합하고
Model과 View를 직접 잇지 않고 Controller를 통해 연결
>> 결합도는 낮추고 응집도는 높혔다!!!
-------------------------------
자판기류(음료 자판기)
10 20
재고 데이터
불만사항 이슈
- 숫자 제외하고 누르니 작동한다?
View에서!
> 사용자랑 맞닿아있는 부분
> 사용자가 입력한 값에 대한 유효성 검사
>> 회사 다닐 때, 바빠서 힘들다..
: 출퇴근할 시간에 자라고 텐트부터 산다는 말이...
: 사용자가 이상한 것이 있다고 한다..
: 404 > Front, 500 > Back
- 1을 눌렀는데 기능이 안나와요!!
Model 아닌가용?
> 1번을 눌렀을 때 인지 하는데.. 아무 것도 안 뜬다!!
>기능이 동작하지 않는다면?
1) C한테 너 V의 "화면 출력 기능"을 연결했어?
2) C는 말합니다.. 아니 근데.. [V가 화면 출력기능]을 나한테 안줬어!
3) V야, 너 [화면출력기능] 아직 안했어..?? <수행 시 2번으로>
>> model파트의 잘못한 것은 없다!!
- 종료버튼을 누르면 "프로그램이 종료됩니다"라고 인사할 수 있는
버전으로 버전 업 플리즈!!!
>> 예쁜화면이 안내되어야하기 때문에
View!!!! 가 답
1) V가 해당 기능을 제작해야함!
2) Controller에게 View에 기능이 추가되었음을 알려준다
3) View에서 func2()만든거 불러오기
>> Controller가 head일 가능성이 크다
>> 관리직이 버전관리를 하는 경우가 많다
>> 코딩지식이 제일 많이 있어야 가능하다!!!
..난 안해야지 ㅋㅋㅋㅋ실력이 없어어어.........
어차피 안시키겠지만..?
- 학생 출력이 이상해요...
>> 이것도 View랑 관련있는 것이다..
: "출력" 자체가 사용자 눈에 보이는 것이기 때문에
View가 담당한다!!
Model은 Java에 데이터만 잘 불러오면 되기때문에
누구에게 보이는 것은 Model이 아닌 View가 해야 할 일이다!!!!
MVC와 관련된 정보
Model
>> DataBase(DB) 데이터를 Java로 어떻게 불러올 지
VO(Value Object) : 기본생성자로 만들어내는 경우가 대다수!!!
>> 데이터와 관련된 정보들을 다룬다!!!
>> 보다 다양한 기능을 추가 가능!!!
ex )
학생부 프로그램을 만든다고 가정!
: 이름, 점수를 입력받기도 하고 설정도 한다
>> 이 때 데이터를 식별하기 위해서는 PK(Primary Key : 기본키)가 필요
--Model 코더 부분----
package model;
// DB 데이터를 Java로 어떻게 불러올 지 >> VO(Value Object)
// 기본생성자로 만들어내는 경우 대다수!!
// 데이터와 관련되서
// 이름, 점수
// 데이터를 식별하려면 PK가 필요하다(Primary Key 기본키)
public class StudentVO {
private int num;
private String name;
private int 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 "StudentVO [num = " + num + ", name = " + name + ", score = " + score + "]";
}
// DB에서 Java로 데이터를 불러오는 것과 같은 역할
public void startModel() {
this.name = "아무무";
this.num = 1001;
this.score = 96;
}
}
View
>> 사용자가 보는 화면을 설계하는 작업
>> 사용자만 관심!!(자판기면 음료에는 관심 x)
화면에 어떤 문자가 어떤 방식으로 나오는지만 신경쓰면 됨
>> 이쁘게 나오는 것이 제일 중요하다!!!!
>> 사용자의 흐름을 설계
: User Flow를 설계!!!
--View 코더 부분----
package view;
import java.util.Scanner;
import model.StudentVO;
// 사용자의 흐름을 설계 >> User Flow 설계
public class StudentView {
private int startNum = 1;
private int endNum = 2; // 기능이 추가된다면, 마지막 기능 번호로 변경할 것!
public int act; // 사용자의 입력값을 저장할 변수
public void startView() {
Scanner sc = new Scanner(System.in);
while(true) {
System.out.println("학생부 프로그램입니다.");
System.out.println("1. 이름출력 2. 종료");
System.out.print("입력 ) ");
this.act = sc.nextInt();
if(startNum <= act && act <= endNum) {
break;
}
System.out.println("번호 확인 후 다시 입력해주세요!");
}
}
public void func1(StudentVO vo) { // 1번 누르면 나오는 화면
System.out.println("학생이름 : " + vo.getName());
}
}
Controller
>> 프로그램을 처음 수행하는 작업을 한다
>> 수행에 필요한 리소스(자원)을 메모리에 적재(load)
: 데이터베이스에서 데이터 가져온다!!
>> 본인이 만든 것이 하나도 없다!
멤버변수로 Model, View를 가지면서 따로 만드는 것은 하나도 없다..?
>> 자기만의 로직이 없다
만약 있다..? 그건 잘못 짜고 있는 것!!!!!
--Controller 코더 부분----
package controller;
import model.StudentVO;
import view.StudentView;
public class StudentController {
StudentVO model;
StudentView view;
public void startController() {
// 프로그램을 처음 수행
// -> 수행에 필요한 리소스(자원)을 메모리에 적재(load)
view = new StudentView();
model = new StudentVO();
model.startModel(); // DB에서 데이터 가져오기
}
public void startApp() {
while(true) {
view.startView();
if(view.act == 1) {
view.func1(model);
// 화면출력기능 func1 대입
// DB의 데이터를 V파트로 옯기는 것(인자로 전달하는 것)은
// C의 몫이다!
}
else if(view.act == 2) {
break;
}
}
}
}
지금까지 만든 APP을 수행시킬 공간!
>> Model, View, Controller 작동시키는 곳
>> 거의..Controller에서 가져오지만..?
>> main()에서 작동시키기 때문에 유일하게 main() 존재
---Client-------------
package client;
import controller.StudentController;
public class Client {
public static void main(String[] args) {
// 지금까지 만든 APP을 수행시킬 공간
// main()이 존재함
StudentController app = new StudentController();
app.startController();
app.startApp();
}
}
'디바이스 융합 자바(Java)기반 풀스택 개발자 양성과정(수업내용)' 카테고리의 다른 글
디바이스 융합 자바(Java) day18 - [재코딩] 자판기 with MVC (0) | 2022.06.30 |
---|---|
디바이스 융합 자바(Java) day17 - 학생부 프로그램 with MVC (0) | 2022.06.29 |
디바이스 융합 자바(Java) day15-1 - MVC 기초개념 (0) | 2022.06.27 |
디바이스 융합 자바(Java) day15 - forEach문,이터레이터,파일입출력 (0) | 2022.06.27 |
디바이스 융합 자바(Java) day14 - 예외,예외처리,버퍼,스레드 (0) | 2022.06.24 |