
자바 프로젝트 안에
패키지를 4개 생성했다

View
사용자와 가장 밀접하다
사용자에게 정보를 받고
정보를 주는 역할을 한다
= 사용자와 관련된 일
Model
데이터와 로직을 관리한다
보통 DB 데이터 상태를
보관하고 관리한다
= DB와 관련된 일
Controller
사용자의 입력을 받아
Model과 View를 연결한다
모동숲을 코딩해본다
동물은 번호, 이름, 어떤 종류의 동물인지
갖고 있다
💡 DTO (Data Transfer Object) 📩
클래스명에 DTO가 붙은 것은 보통 데이터 전송 객체를 의미
데이터를 주고받기 위해 사용하는 객체
즉, 데이터를 옮기기 위한 그릇
💡 DAO (Data Access Object) 🤸♀️
클래스명에 DAO가 붙은 것은 보통 데이터 접근 객체를 의미
DAO는 데이터베이스(DB)와 직접 통신하여
데이터를 CRUD하는 객체


메뉴에 위의 기능을 넣어
사용자에게 입력받는
Controller 부분을 먼저 코딩
Controller은 Model과 View의 조합이므로
Controller는 멤버변수로 View와 Model을 갖는다
private PersonDAO model;
private View view;

Controller 생성자에서는 멤버변수에게 new 시킨다
16번 라인 : 나중에 나오는 Model에 PersonDAO
17번 라인 : 나중에 나오는 view의 View
=> 클래스의 생성자(Constructor) 를 호출해 새로운 객체를 메모리에 생성
public void startApp(){
메서드에서 startApp을 만들었다
하나의 자바프로젝트에서 같이 주고받으며
사용하기 때문에 public을 꼭 붙인다.
int PK = 101; //PK는 사용자에게 입력 XXX
동물의 번호는 고유하게 부여하기로 약속했다
그래서 사용자에게 입력받는 것이 아닌
메서드 안에 선언을 해둔다
위에서 말한 7가지 메뉴를 프로그램 종료(0)일 때까지
입력을 받아야 하므로 while문으로 시작을 한다
view.printMenu();
멤버변수 view를 이용해 출력한다.
현재의 view : 사용자에게 보여주는 메뉴 출력
int command = view.getMenuNum();
사용자에게 메뉴번호를 입력받는 getMenuNum() 함수를 가져온다
몇 번 메뉴일지 입력을 받아 command에 할당한다
public int getMenuNum() {
System.out.print("메뉴번호입력 >> ");
int num = scanner.nextInt();
return num;
}
View의 getMenuNum() 함수
사용자가 1을 입력하면 ➡ 동물 하나 추가
String name = view.getName();
view의 getName() 함수를 이용해 이름을 입력받는다
사용자가 입력을 하기 때문에 사용자와 밀접 -> View에서 만들게 되었고 View에서 가져와야한다
// 이름 받아오기
public String getName() {
System.out.print("주민이름입력 >> ");
String name = scanner.next();
return name;
}
view의 getName() 함수
PersonDTO는 model의 자바 클래스로 DB 데이터와 관련된 일을 한다
PersonDTO personDTO = new PersonDTO();
코드의 결합도를 낮추기 위해 PersonDTO의 객체를 생성하여
personDTO에 데이터를 전송하자
personDTO.setNum(PK++);
personDTO.setName(name);
객체에 동물의 번호와 이름을 set시킨다
boolean flag = model.insert(personDTO);
DB에 주민을 추가한다 (DB == model에 있겠지?? 생각)
insert시킨다
// 삽입, 추가, 삭제 -> 성공 실패 여부 boolean
public boolean insert(PersonDTO personDTO) {
String type = "햄스터";
try {
PersonDTO data = new PersonDTO();
data.setNum(personDTO.getNum());
data.setName(personDTO.getName());
data.setType(type);
this.datas.add(data);
// 내 db 안에 새로운 주민 정보를 더해줘
// 이전코드 : this.datas.add(new PersonDTO(personDTO.getNum(), personDTO.getName(), type));
}
catch(Exception e) {
return false;
}
return true;
}
model의 PersonDAO - insert함수
사용자에게 입력받는 건 이름뿐이고
종류는 햄스터로 초기화 하기로 약속함
insert함수는 삽입이 되는지 안되는지 성공 실패 여부를 알려주기 때문에boolean이 반환형이다

PersonDTO data = new PersonDTO();
PersonDTO에는 번호, 이름, 타입이 멤버변수로 있다코드의 결합도를 낮추기 위해 매개변수로 가져오는 것이 아닌
PersonDTO personDTO 로 변수를 통일시키고
PersonDTO의 객체 data를 생성한다
그리고 추가하려는 이름을 personDTO.getName()
을 통해 가져오고 새로 만든 객체레 setName 시킨다
해석 == 내 DB 안에 새로운 주민 정보를 더해줘~!
여기까지의 Controller 코드
// model과 View의 조합 -> Controller의 멤버변수로 View와 Model을 갖는 이유
public class Controller {
private PersonDAO model;
private View view;
// 멤버변수 선언 ➡ 멤버변수 초기화 ➡ 생성자
public Controller() {
this.model = new PersonDAO();
this.view = new View();
}
public void startApp(){
int PK = 101; //PK는 사용자에게 입력 XXX
while(true) {
// 사용자에게 메뉴 보여주기
view.printMenu();
// 몇번 메뉴일지 입력받아오기
int command = view.getMenuNum();
if(command == 0) {
view.printTurnOff();
break;
}
else if(command == 1) {
// 이름 입력받기 / PK는 시스템에서 받음
String name = view.getName(); // 사용자 입력 -> View
PersonDTO personDTO = new PersonDTO();
personDTO.setNum(PK++);
personDTO.setName(name);
// db에 주민 추가
boolean flag = model.insert(personDTO); // DB에 추가 -> Model
// insert에서 boolean을 반환하기 때문에 그 반환값을 받응 변수.
// 주민추가 성공or실패 알려주기
// 화면 출력 -> V
if(flag) {
view.printFunc01();
} else {
view.printFunc02();
}
}
// 생략
'🍏 개발일기' 카테고리의 다른 글
| MCV 연습하기 - 3. 주민 1명 출력 (0) | 2025.10.24 |
|---|---|
| MVC 연습하기 - 2.전체 출력 (0) | 2025.10.24 |
| MVC디자인패턴 (0) | 2025.10.23 |
| 이터레이터 | 스레드 (0) | 2025.10.23 |
| 프레임워크 | Set | Map (0) | 2025.10.22 |