자바-자린이의 도전기
Collection 1-4)Collection을 이용한 MVC 패턴 예제
광형
2022. 5. 16. 10:00
728x90
728x90
SMALL
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