/////
home
자바
home
🚏

02. MVC (Model - View - Controller)

1. Model - VO(Value Object)

데이터들을 담을 수 있게 도와주는 역할
Music 객체
package com.kh.chap01_list.part02_mvc.model.vo; // VO(Value Object) : 데이터들을 담을 수 있게 도와주는 역할 public class Music { private String title; private String artist; public Music() {} public Music(String title, String artist) { this.title = title; this.artist = artist; } public String getTitle() { return title; } public void setTitle(String title) { this.title = title; } public String getArtist() { return artist; } public void setArtist(String artist) { this.artist = artist; } @Override public String toString() { return "Music [title=" + title + ", artist=" + artist + "]"; } }
Java
복사

2. View : 시각적인 요소(화면) 입력 및 출력

사용자가 보는 화면
MusicMenu
package com.kh.chap01_list.part02_mvc.view; import java.util.ArrayList; import java.util.Scanner; import com.kh.chap01_list.part02_mvc.controller.MusicController; import com.kh.chap01_list.part02_mvc.model.vo.Music; // View : 시각적인 요소 (화면) 입력 및 출력 public class MusicMenu { // 클래스전역에서 Scanner 객체를 쓸 수 있도록 세팅 private Scanner sc = new Scanner(System.in); // 클래스 전역에서 MusicController 객체를 쓸 수 있도록 세팅 private MusicController mc = new MusicController(); // alt + shift + j : 파란색주석 /** * 프로그램 실행시 처음 보여지는 화면 (메인 메뉴) */ public void mainMenu() { while(true) { System.out.println("\n== Welcome 별밤 =="); System.out.println("1. 곡 전체 조회"); System.out.println("2. 새로운 곡 추가"); System.out.println("3. 특정 곡 검색"); System.out.println("4. 특정 곡 삭제"); System.out.println("5. 특정 곡 수정"); System.out.println("0. 프로그램 종료"); System.out.print("메뉴 선택 : "); int menu = sc.nextInt(); sc.nextLine(); switch(menu) { case 1: selectMusicList(); break; case 2: insertMusic(); break; case 3: searchMusic(); break; case 4: deleteMusic(); break; case 5: updateMusic(); break; case 0: System.out.println("\n그동안 이용해주셔서 감사합니다."); return; default : System.out.println("\n잘못 입력하였습니다. 다시 입력해주세요."); } } } /** * 곡 전체 조회하는 서브 화면 */ public void selectMusicList() { System.out.println("\n=== 곡 전체 조회 ==="); // 곡 전체 조회 요청!! == Controller에 메소드를 호출!! ArrayList<Music> list = mc.selectMusicList(); if(list.isEmpty()) { // 비어있을 경우 System.out.println("현재 존재하는 곡이 없습니다."); }else { // 뭐라도 담겨있을 경우 for(int i=0; i<list.size(); i++) { System.out.println(list.get(i)); } } } /** * 새로운 곡 추가하는 서브 화면 */ public void insertMusic() { System.out.println("\n=== 새로운 곡 추가 ==="); System.out.print("제목 입력 : "); String title = sc.nextLine(); System.out.print("가수 입력 : "); String artist = sc.nextLine(); // 곡 추가 요청!! == Controller 메소드 호출!! mc.insertMusic(title, artist); System.out.println("성공적으로 추가되었습니다."); } /** * 특정 곡 검색하는 서브 화면 */ /* public void searchMusic() { System.out.println("\n=== 특정 곡 검색 ==="); System.out.print("검색할 곡 키워드 : "); String keyword = sc.nextLine(); // 검색 요청 !! == Controller 메소드 호출!! ArrayList<Music> list = mc.searchMusic(keyword); if(list.isEmpty()) { // 검색 결과가 x System.out.println(keyword + "에 대한 검색 결과가 없습니다."); }else { // 검색 결과가 o for(int i=0; i<list.size(); i++) { System.out.println(list.get(i)); } } } */ /** * 특정 곡 삭제하는 서브 화면 */ public void deleteMusic() { System.out.println("\n=== 특정 곡 삭제 ==="); System.out.print("삭제할 곡 명 : "); String title = sc.nextLine(); // 삭제 요청 !! == Controller 메소드 호출 int result = mc.deleteMusic(title); if(result > 0) { System.out.println("성공적으로 삭제하였습니다."); }else { System.out.println("삭제할 곡을 찾지 못했습니다."); } //selecctMusicList(); // 삭제 후에 리스트를 다시 조회요청 } /** * 특정 곡 수정하는 서브 화면 */ public void updateMusic() { System.out.println("\n=== 특정 곡 수정 ==="); System.out.print("기존 곡 이름 : "); String title = sc.nextLine(); System.out.print("수정 내용(가수) : "); String upArtist = sc.nextLine(); System.out.print("수정 내용(곡명) : "); String upTitle = sc.nextLine(); // 수정 요청 !! == Controller 메소드 호출!! int result = mc.updateMusic(title, upArtist, upTitle); if(result > 0) { System.out.println("성공적으로 변경되었습니다."); }else { System.out.println("수정할 곡을 찾지 못했습니다."); } } // 심화버전 public void searchMusic() { System.out.println("\n=== 특정 곡 검색 ==="); System.out.println("1. 제목으로 검색"); System.out.println("2. 가수명으로 검색"); System.out.println("3. 제목+가수명으로 검색"); System.out.print("메뉴 : "); int menu = sc.nextInt(); sc.nextLine(); System.out.print("검색할 곡 키워드 : "); String keyword = sc.nextLine(); // 검색 요청 !! == Controller 메소드 호출!! ArrayList<Music> list = mc.searchMusic(menu, keyword); if(list.isEmpty()) { // 검색 결과가 x System.out.println(keyword + "에 대한 검색 결과가 없습니다."); }else { // 검색 결과가 o for(int i=0; i<list.size(); i++) { System.out.println(list.get(i)); } } } }
Java
복사

3. Controller : 사용자의 요청을 받아서 처리해주는 역할

package com.kh.chap01_list.part02_mvc.controller; import java.util.ArrayList; import com.kh.chap01_list.part02_mvc.model.vo.Music; // Controller : 사용자의 요청을 받아서 처리해주는 역할 public class MusicController { private ArrayList<Music> list = new ArrayList<>(); { list.add(new Music("안녕", "나의사랑")); list.add(new Music("Goodbye", "박효신")); list.add(new Music("안경잡이", "나비")); } public ArrayList<Music> selectMusicList() { return list; } public void insertMusic(String title, String artist) { list.add(new Music(title, artist)); } /* * public ArrayList<Music> searchMusic(String keyword) { * * ArrayList<Music> searchList = new ArrayList<>(); * * for(int i=0; i<list.size(); i++) { * * if(list.get(i).getTitle().contains(keyword) || * list.get(i).getArtist().contains(keyword)) { * //System.out.println(list.get(i)); searchList.add(list.get(i)); } * * } * * return searchList; * * } */ public ArrayList<Music> searchMusic(int menu, String keyword) { ArrayList<Music> searchList = new ArrayList<>(); // 텅빈리스트 if(menu == 1) { for(int i=0; i<list.size(); i++) { if(list.get(i).getTitle().contains(keyword)) { searchList.add(list.get(i)); } } }else if(menu == 2) { for(int i=0; i<list.size(); i++) { if(list.get(i).getArtist().contains(keyword)) { searchList.add(list.get(i)); } } }else if(menu == 3) { for(int i=0; i<list.size(); i++) { if(list.get(i).getTitle().contains(keyword) || list.get(i).getArtist().contains(keyword)) { //System.out.println(list.get(i)); searchList.add(list.get(i)); } } } return searchList; } public int deleteMusic(String title) { int result = 0; for (int i = 0; i < list.size(); i++) { if (list.get(i).getTitle().equals(title)) { list.remove(i--); // list 삭제하면 크기와 인덱스가 줄어듦(앞으로 땡겨짐) => i--함으로써 remove연산 후 i가 제자리걸음(?)하게 만들어야함 result++; } } // result = ? return result; } public int updateMusic(String title, String upArtist, String upTitle) { int result = 0; // 수정된 개수 for (int i = 0; i < list.size(); i++) { if (list.get(i).getTitle().equals(title)) { // 1. list.get(i)에 위치해 있는 기존의 Music의 각 필드값 따로따로 수정 /* * list.get(i).setArtist(upArtist); list.get(i).setTitle(upTitle); */ // 2. list에 i 위치에 Music 객체를 아예 새로운 내용의 Music 객체로 통째로 변경 list.set(i, new Music(upTitle, upArtist)); result++; } } return result; } }
Java
복사