package controller;
import java.util.ArrayList;
import model.StudentDAO;
import model.StudentDTO;
import view.View;
public class Controller { // startUp() 만들 때 앞에 public 붙여서 다른 패키지에서 사용할 수 있도록 하기
/*PRIVATE 모델 모델;
private 뷰 뷰;
Controller() {
this.모델 = new 모델();
this.뷰 = new 뷰();
}
public void startApp() {
while(true) {
this.뷰.printMenu();
int menuNum=this.뷰.inputMenuNum();
if(menuNum = 0) {
}
}*/
private StudentDAO model;
private View view;
private int NUM;
public Controller(){
this.model=new StudentDAO();
this.view=new View();
this.NUM=1004;
}
public void startApp() {
while(true) {
this.view.printMenu();
int menuNum=this.view.inputMenuNum();
if(menuNum==0) {
this.view.printShutdown();
break;
}
else if(menuNum==1) {
String name=this.view.inputName();
int score=this.view.inputScore();
boolean flag=this.model.insert(name,score,this.NUM++);
if(flag) {
this.view.printInsertTrue();
}
}
else if(menuNum==2) {
ArrayList<StudentDTO> datas=this.model.selectAll(); // dto는 자료형이니까 studentdto를 자료형으로 하는
// arraylist인 datas를 만든다. 정보는 model을 통해 전부 불러온다.
this.view.printDatas(datas); // 뷰에 있는 printDatas를 통해 가져온 datas 전체를 출력함
}
else if(menuNum==3) {
int num=this.view.inputNum();
StudentDTO data=this.model.selectOne(num);
this.view.printData(data);
}
else if(menuNum==4) {
int num=this.view.inputNum();
String name=this.view.inputName();
boolean flag = this.model.update(num,name);
if(flag) {
this.view.printUpdateTrue();
}
else {
this.view.printUpdateFalse();
}
}
else if(menuNum==5) {
int num=this.view.inputNum();
boolean flag=this.model.delete(num);
if(flag) {
this.view.printDeleteTrue();
}
else {
this.view.printDeleteFalse();
}
}
}
}
}
다음과 같은 코드가 있다.
import model.StudentDAO;
import model.StudentDTO;
import view.View;
public class Controller { // startUp() 만들 때 앞에 public 붙여서 다른 패키지에서 사용할 수 있도록 하기
private StudentDAO model;
private View view;
private int NUM;
public Controller(){
this.model=new StudentDAO();
this.view=new View();
this.NUM=1004;
}
StudentDAO, StudentDTO, View를 import 하고 있다.
import.패키지명.클래스명으로 받아오는 것.
컨트롤러 클래스 안에서는 private로 dao, view, 그리고 학생번호를 위한 NUM이라는 변수를 선언하고 있다.
private.클래스명.변수명 순으로 선언.
Controller 생성자 안에서는 model이라는 변수와 view라는 변수를 new를 통해 각자 객체를 생성하고 있다.
view와 studentdao 안에 있는 메서드를 사용하기 위해서는 view와 model 객체를 초기화해야한다.
else if(menuNum==3) {
int num=this.view.inputNum();
StudentDTO data=this.model.selectOne(num);
this.view.printData(data);
}
이때 객체 생성은 view랑 studentdao 2개만 했는데 studentdao를 같이 import 해 온 이유는
1) DAO에서 데이터를 가져와서 쓴다고 해도, DAO에서 가져온 그 데이터는 DTO 타입이기 때문에 컨트롤러에서 해당 데이터를 다루려면 DTO도 함께 import해서 가져와야 한다.
2) Controller에서 개별적으로 StudentDTO를 사용할 수도 있다.
위와 같은 코드에서도 selectOne을 사용할 때는 데이터를 단 하나만 가져오기 때문에 Controller에서 자료형이 StudentDTO인 데이터 하나를 다뤄야 할 때가 있다. 위 코드에서는 selectOne이 StudentDTO 객체를 반환하고 있다.
else if(menuNum==2) {
ArrayList<StudentDTO> datas=this.model.selectAll(); // dto는 자료형이니까 studentdto를 자료형으로 하는
// arraylist인 datas를 만든다. 정보는 model을 통해 전부 불러온다.
this.view.printDatas(datas); // 뷰에 있는 printDatas를 통해 가져온 datas 전체를 출력함
}
다음은 학생 목록을 출력하는 컨트롤러 코드이다.
여기서 StudentDTO를 자료형으로 가지는 ArrayList인 datas라는 변수를 선언하였고, 모델에서 selectAll로 받아온 모든 학생 정보를 datas에 저장하고 있다.
그리고 저장된 학생 정보를 뷰 출력 메서드로 보내 사용자에게 출력해주고 있다.
여기서 datas라는 변수를 선언하여 정보를 저장한 이유는
1) 복사본을 만들어서 기존 데이터에 영향이 없도록 하기 위해서
2) selectAll()이 반환하는 값을 C에서 활용하기 위해서
3) 가독성과 유지보수성을 위해서.
- 예를 들어, 아래처럼 한 줄로 선언해버리면 selectAll이 가져다 준 정보가 어떤 타입의 데이터고, 어떤 데이터를 반환하는지 명확하게 알 수 없게 되는데, datas라는 변수를 선언하여 저장하면 selectAll()에서 받아온 데이터가 어떤 자료형의 어떤 데이터인지 알기 쉽다.
this.view.printDatas(this.model.selectAll());
else if(menuNum==5) {
int num=this.view.inputNum();
boolean flag=this.model.delete(num);
if(flag) {
this.view.printDeleteTrue();
}
else {
this.view.printDeleteFalse();
}
}
모든 메뉴번호마다 현재 boolean flag 를 사용하고 있다.
이걸 사용하는 이유는 현재 model의 반환형이 모두 boolean형이기 때문이다.
만약 boolean flag=this.model.delete(num);를 통해 회원 삭제가 정상으로 이루어진다면, model의 delete 메서드는 true를 반환할 것이고, flag가 참이기 때문에 삭제 성공 메시지를 출력하게 될 것이다.
반대로, 회원 삭제가 정상적으로 이루어지지 않았다면 model의 delete 메서드는 false를 반환할 것이기 때문에 else문에 있는 삭제 실패 메시지가 출력될 것이다.
실패/성공 시 각각 다른 뷰 메서드를 실행하기 위해서 if(flag) ~ else 를 사용하고 있다.
'IT > JAVA' 카테고리의 다른 글
MVC 패턴 복습 2 (0) | 2025.02.09 |
---|---|
MVC 패턴 - Model 분석 (0) | 2025.02.08 |
MVC 패턴 복습 (0) | 2025.02.07 |
파일 입출력 (0) | 2025.02.04 |
유효성 검사, 예외처리 전 코드 (2) | 2025.02.03 |