자바-자린이의 도전기

Collection 1-4)Collection을 이용한 MVC 패턴 예제

광형 2022. 5. 16. 10:00
728x90
728x90
SMALL

https://kwanghyung.tistory.com/entry/Collection-1-3-ArrayList-%EC%B6%94%EA%B0%80%EB%A9%94%EC%86%8C%EB%93%9C%EC%A0%9C%EB%84%A4%EB%A6%AD

 

Collection 1-3) ArrayList 추가메소드/제네릭

https://kwanghyung.tistory.com/entry/Collection-1-2-ArrayList Collection 1-2) ArrayList? https://kwanghyung.tistory.com/entry/Collection-1-1-Collection-%ED%81%B4%EB%9E%98%EC%8A%A4 Collection 1-1) Co..

kwanghyung.tistory.com

  오늘은 Collection arraylist를 이용한 간단한 mvc 패턴을 만드려고 합니다. 노래방 기능을 몇 가지 구현해서 노래방과 같은 느낌을 내려고 합니다.

  먼저 4가지의 클래스를 정의합니다. 기본 라이브러리 클래스 Music 클래스와 실행 클래스 Run 클래스 뷰 화면을 담당한느 View 클래스 구현 기능 코드 Controller 클래스로 나뉘고 구현하였습니다.


1. Music 클래스

public class Music{
	
	private String title;//제목
	private String artist;//가수명
	
	public Music() {
		super();
	}

	public Music(String title, String artist) {
		super();
		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 + "]";
	}

	
}

해당 클래스는 title과 artist속성을 두고 get,set 함수와 toString 오버라이드한 함수로 구성되어 있습니다.


2. MusicStart 실행 클래스

import com.kh.chap01_list.part02_mvc.view.MusicView;

public class MusicStart {

	public static void main(String[] args) {
		
//		MusicView mv = new MusicView();
//		
//		mv.menu();
		
		new MusicView().menu();
				
		
		
	}

}

해당 클래스는 MusicView() 클래스에 menu()함수를 실행합니다.

3. MusicView  클래스

:추가,전체조회,특정곡조회,삭제,수정기능을 구현해서 보여주는 화면

 

import java.util.ArrayList;
import java.util.Collections;
import java.util.Comparator;
import java.util.Scanner;

import com.kh.chap01_list.part02_mvc.controller.MusicController;
import com.kh.chap01_list.part02_mvc.model.vo.Music;

public class MusicView {

	private Scanner sc = new Scanner(System.in);
	private MusicController mc = new MusicController();
	
	
	public void menu() {
		//추가,전체조회,특정곡조회,삭제,수정 
		
		while(true) {
		
		System.out.println("1.새로운 곡 추가");
		System.out.println("2.전체 곡 조회");
		System.out.println("3.특정 곡 조회");
		System.out.println("4.곡 삭제");
		System.out.println("5.곡 수정");
		System.out.println("6.곡 정렬");
		System.out.println("9.프로그램 종료");
	
		System.out.println("메뉴 번호 입력 : ");
		int num = sc.nextInt();
		sc.nextLine(); //엔터날리기
		
		switch(num) {
		case 1: insertMusic(); break;
		case 2: showAll(); 	   break;
		case 3: searchMusic(); break;
		case 4: deleteMusic(); break;
		case 5: updateMusic(); break;
		case 6: sortMusic();   break;
		case 9: System.out.println("프로그램을 종료합니다 ."); return;
		default : System.out.println("잘못 입력하셨습니다. 다시 입력해주세요.");
		
		}
		
	}
		
}
	
	//1.새로운 곡을 넣는 화면 
	public void insertMusic() {
		
		System.out.println("=====곡 추가=====");
		System.out.println("곡명 입력 : ");
		String title=sc.nextLine();
		System.out.println("가수명 입력 :");
		String artist=sc.nextLine();
		
		mc.insertMusic(title, artist);
		
		System.out.println("새로운 곡이 추가 되었습니다.");
		
	}
	
	//2.전체 곡을 조회하는 화면 
	public void showAll() {
		
		System.out.println("=====전체 곡 조회=====");
		
		System.out.println(mc.showAll());//리스트출력형태로 한번에 출력하기
		//따로 뽑고싶다면 
		ArrayList<Music> list =mc.showAll();

		//노래목록이 비어있는지 확인하기 
		if(list.isEmpty()) {//노래목록이 비어있을때
			System.out.println("존재하는 곡이 없습니다.");
		}else {//비어있지 않을 경우(노래가 한곡이라도 있을 경우)
			//향상된 for문으로 조회하기
			//한곡씩 출력된다
			for(Music m : list) {
				System.out.println(m);
			}
		}
		
	}
	
	
	//3번 특정곡 조회 화면 
	public void searchMusic() {
		
		System.out.println("=====곡 검색=====");
		System.out.println("입력할 곡 키워드 : ");
		
		String keyword=sc.nextLine();
		
		ArrayList<Music> list=mc.searchMusic(keyword); //searched list의 주소가 담겨옴 
		
		System.out.println("검색 결과 : ");
		
		if(list.isEmpty()) {
			System.out.println("조회된 결과가 없습니다");
		}else {
			//list에 있는 Music들을 m에 담아 반환
			for(Music m :list) {
				System.out.println(m);
			}
		}
	}
	
	//4번 곡 삭제화면 
	public void deleteMusic() {
		
		System.out.println("=====곡 삭제=====");
		System.out.println("삭제할 곡명 입력 : ");
		String title=sc.nextLine();
		
		int num =mc.deleteMusic(title); //count
		if(num>0) {
			System.out.println(num+"개의 노래가 삭제되었습니다");
		}else {
			System.out.println("해당하는 노래가 없습니다.");
		}
	}
	//5.곡 수정 화면 
	
	public void updateMusic() {
		
		System.out.println("=====곡 수정======");
		System.out.println("수정할 곡명 입력 : ");
		String title=sc.nextLine();
		System.out.println("새로운 곡명 입력 : ");
		String newTitle=sc.nextLine();
		System.out.println("새로운 가수명 입력 :");
		String newArtist=sc.nextLine();
		mc.updateMusic(title, newTitle, newArtist);
	}
	
	
	public void sortMusic() {
		System.out.println("곡 제목 정렬 ");
		
		ArrayList<Music> list = mc.sortMusic();
		
		for(Music m :list) {
			System.out.println(m);
		}
		
		
	}
	
		
	
}

4. MusicController 클래스 

import java.util.ArrayList;
import java.util.Collections;
import java.util.Comparator;

import com.kh.chap01_list.part02_mvc.model.vo.Music;

public class MusicController {
	
	//필드부 
	//음악 리스트 생성
	
	private ArrayList<Music> list = new ArrayList<>();
	
	{ //초기화 블록 : 객체 생성시 무조건 수행되는 블록
		list.add(new Music("오필승코리아","YB"));
		list.add(new Music("봄날","BTS"));
		list.add(new Music("브라보마이라이프","봄여름가을겨울"));
		list.add(new Music("one love","mc the max"));
		list.add(new Music("니가 보고싶은 밤","윤딴딴"));
	}
	//새로운 곡 추가 요청이 있을때 실행되는 메소드
	public void insertMusic(String title,String artist) {
		
			list.add(new Music(title,artist));
	}
	
	//곡 전체 조회 메소드 
	public ArrayList<Music> showAll(){
		
		return list;
	}
	
	//특정 곡 찾기 메소드 contains 문자열에 해당문자가 포함되어있는지 확인하는 메소드 
	public ArrayList<Music> searchMusic(String keyword) {
		
//		list.get(0).getTitle() 제목을 반환 String
//		list.get(0).getTitle().contains(keyword); 0번째인덱스에 있는 객체의 제목과 키워드를 비교해서 포함인지확인
		ArrayList<Music> searched = new ArrayList<>();
		
		for(int i=0;i<list.size();i++) {
			
			if(list.get(i).getTitle().contains(keyword)) {
				//제목에 keyword가 포함되어있는지 묻는 구문
				//찾았으면 새로만든 searched 리스트에다 추가해주면 됨
				searched.add(list.get(i));
			}
		}
		//찾은 곡들 담았으니까 보내준다
		return searched;
	}
	
	//특정 곡 삭제 메소드
	public int deleteMusic(String title) {
		int count=0;
		for(int i=0;i<list.size();i++) {
			
			if(list.get(i).getTitle().equals(title)) {// list의 i번째 인덱스에 있는 제목이 title과 같을때
				//즉 내가 삭제할 제목과 list에 i번째에 담겨있는 제목이 같아서 삭제할 노래일때..
				list.remove(i);  
				i--;
				count++;
			}
		}
		return count;
	}
	
	//특정 곡 수정메소드
	public void updateMusic(String title,String newTitle,String newArtist) {
		
//		list의 set 이용하기
//		list.set(0, new Music(newTitle,newArtist));
		
//		Music 객체의 setter사용하기 
		
		for(int i=0;i<list.size();i++) {
			
			//list의 i번째 있는 Music의 제목이 입력받은 제목과 일치할때
			if(list.get(i).getTitle().equals(title)) {
				
				list.get(i).setTitle(newTitle); //제목 수정
				list.get(i).setArtist(newArtist); //가수 수정
				
			}
			
		}
	}
	
	public ArrayList<Music> sortMusic() {
		
		Collections.sort(list,new Comparator<Music>(){

			@Override
			public int compare(Music o1, Music o2) {
				
				return o1.getTitle().compareTo(o2.getTitle());
			}
			
		});
		
		return list;
	
	}

}
728x90
300x250
LIST