🍏 개발일기

MVC 연습하기 - 1. 주민 추가

보배 진 2025. 10. 24. 15:06

 

 

 

자바 프로젝트 안에 

패키지를 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