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
복사


