2020년 11월 10일

업데이트:


자바 복습 문제

// MusicService.java

package com.kh.music.model.service;
import java.util.List;
import com.kh.music.model.vo.Music;
public interface MusicService {
	// 1. 음악 목록 전체 조회
	public abstract List<Music> selectAll();
	// 2-1. 특정 단어가 제목에 포함된 노래 조회
	public abstract List<Music> selectTitle(String title);
	// 2-2. 특정 단어가 가수명에 포함된 노래 조회
	public abstract List<Music> selectArtist(String artist);
	// 2-3. 좋아요 랭킹순으로 조회
	public abstract List<Music> selectTopFavoriteCount();
	// 3-1. 나의 뮤직 리스트 조회
	public abstract List<Music> selectMyMusicList();
	// 3-2. 나의 뮤직 리스트에 곡 추가(곡 번호)
	public abstract boolean addMusicList(int musicNo);
	// 3-3. 나의 뮤직 리스트에 곡 제거(곡 번호)
	public abstract Music removeMusicList(int musicNo);
	// 4. 좋아요 누르기
	public abstract void incFavoriteCount(int musicNo);
}



// MusicServicelmpl.java
package com.kh.music.model.service;

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

import com.kh.music.model.vo.Music;

public class MusicServiceImpl implements MusicService{
	
	private Scanner sc = new Scanner(System.in);
	
	private List<Music> musicTable = null; // 음악 데이터가 저장되어 있는 리스트
	private List<Music> myList = new ArrayList<Music>(); // 나의 뮤직 리스트
	
	private int seqMusicNo = 1; // 음악이 추가될 때 마다 고유한 번호를 부여하는 변수. (DB 시퀀스처럼 사용, PK를 지정한다고 생각하자!)
	
	public MusicServiceImpl() {
		// 기본생성자로 MusicServiceImpl 객체가 생성된 경우
		// musicTable 객체 생성 후 샘플 데이터 10개 추가
		musicTable = new ArrayList<Music>();
		musicTable.add(new Music(seqMusicNo++, "Dynamite", "BTS"));
		musicTable.add(new Music(seqMusicNo++, "힘든 건 사랑이 아니다", "임창정"));
		musicTable.add(new Music(seqMusicNo++, "Lovesick Girls", "BLACKPINK"));
		musicTable.add(new Music(seqMusicNo++, "DON'T TOUCH ME", "환불원정대"));
		musicTable.add(new Music(seqMusicNo++, "취기를 빌려 (취향저격 그녀 X 산들)", "산들"));
		musicTable.add(new Music(seqMusicNo++, "오래된 노래", "스탠딩 에그"));
		musicTable.add(new Music(seqMusicNo++, "잠이 오질 않네요", "장범준"));
		musicTable.add(new Music(seqMusicNo++, "딩가딩가 (Dingga)", "마마무"));
		musicTable.add(new Music(seqMusicNo++, "When We Disco (Duet with 선미)", "박진영"));
		musicTable.add(new Music(seqMusicNo++, "I CAN’T STOP ME", "TWICE(트와이스)"));
	}
	
	
	// 1. 음악 목록 전체 조회
	@Override
	public List<Music> selectAll() {
		return musicTable;
	}

	// 2-1. 특정 단어가 제목에 포함된 노래 조회
	@Override
	public List<Music> selectTitle(String title) {
		List<Music> m = new ArrayList<Music>();
		for(Music music : musicTable) {
			if(music.getTitle().contains(title)) {
				m.add(music);
				break;
			}
		}
		return m;
	}

	// 2-2. 특정 단어가 가수명에 포함된 노래 조회
	@Override
	public List<Music> selectArtist(String artist) {
		List<Music> m = new ArrayList<Music>();
		for(Music music : musicTable) {
			if(music.getArtist().contains(artist)) {
				m.add(music);
				break;
			}
		}
		return m;
	}

	// 2-3. 좋아요 랭킹순으로 조회
	@Override
	public List<Music> selectTopFavoriteCount() {
		List<Music> musicTable2 = new ArrayList<Music>();
		for(Music m : musicTable) {
			musicTable2.add(m);
		}
		Collections.sort(musicTable2);
		return musicTable2;
	}

	// 3-1. 나의 뮤직 리스트 조회
	@Override
	public List<Music> selectMyMusicList() {
		return myList;
	}


	// 3-2. 나의 뮤직 리스트에 곡 추가(곡 번호)
	@Override
	public boolean addMusicList(int musicNo) {
		boolean yn = false;
		for(Music music : musicTable) {
			if(music.getMusicNo() == musicNo) {
				if(myList.contains(music) != true) {
					myList.add(music);
					yn = true;
				}
			}
		}
		return yn;
	}

	// 3-3. 나의 뮤직 리스트에 곡 제거(곡 번호)
	@Override
	public Music removeMusicList(int musicNo) {
		Music m = new Music();
		m = null;
		for(Music music : myList) {
			if(music.getMusicNo() == musicNo) {
				m = music;
				myList.remove(music);
				break;
			} 
		}
		return m;
	}
	
	// 4. 좋아요 누르기
	@Override
	public void incFavoriteCount(int musicNo) {
		int cnt = 0;
		for(Music music : musicTable) {
			if(music.getMusicNo() == musicNo) {
				cnt = music.getFavoriteCount();
				music.setFavoriteCount(++cnt);
			}
		}
	}
	
}



// MusicRun.java

package com.kh.music.model.vo;
public class Music implements Comparable<Music> {
	private int musicNo;	// 곡 번호
	private String title;	// 곡 제목
	private String artist;	// 가수
	private int favoriteCount;	// 좋아요 수
	
	// 기본 생성자
	public Music() { }

	// 매개변수로 musicNo, title, artist 만 가지고 있는 생성자.
	public Music(int musicNo, String title, String artist) {
		super();
		this.musicNo = musicNo;
		this.title = title;
		this.artist = artist;
		// 해당 생성자로 객체 생성 시 favoriteCount가 지정되어 있지 않으므로 
		// favoriteCount는 JVM의 int형 기본값 0으로 초기화됨.
	}

	public Music(int musicNo, String title, String artist, int favoriteCount) {
		super();
		this.musicNo = musicNo;
		this.title = title;
		this.artist = artist;
		this.favoriteCount = favoriteCount;
	}

	public int getMusicNo() {
		return musicNo;
	}

	public void setMusicNo(int musicNo) {
		this.musicNo = musicNo;
	}

	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;
	}

	public int getFavoriteCount() {
		return favoriteCount;
	}

	public void setFavoriteCount(int favoriteCount) {
		this.favoriteCount = favoriteCount;
	}


	@Override
	public int hashCode() {
		final int prime = 31;
		int result = 1;
		result = prime * result + ((artist == null) ? 0 : artist.hashCode());
		result = prime * result + favoriteCount;
		result = prime * result + musicNo;
		result = prime * result + ((title == null) ? 0 : title.hashCode());
		return result;
	}

	@Override
	public boolean equals(Object obj) {
		if (this == obj)
			return true;
		if (obj == null)
			return false;
		if (getClass() != obj.getClass())
			return false;
		Music other = (Music) obj;
		if (artist == null) {
			if (other.artist != null)
				return false;
		} else if (!artist.equals(other.artist))
			return false;
		if (favoriteCount != other.favoriteCount)
			return false;
		if (musicNo != other.musicNo)
			return false;
		if (title == null) {
			if (other.title != null)
				return false;
		} else if (!title.equals(other.title))
			return false;
		return true;
	}

	@Override
	public String toString() {
		return musicNo + " / " + title + " / " + artist + " / "
				+ favoriteCount;
	}
	
	@Override
	public int compareTo(Music o) {
		return o.getFavoriteCount() - getFavoriteCount();
	}
}



// MusicView.java
package com.kh.music.view;

import java.util.List;
import java.util.Scanner;

import com.kh.music.model.service.MusicService;
import com.kh.music.model.service.MusicServiceImpl;
import com.kh.music.model.vo.Music;

public class MusicView {
	
	private Scanner sc = new Scanner(System.in);
	MusicService service = new MusicServiceImpl();
	
	public void displayMain() {
		int sel = 0;
		do {
			System.out.println();
			System.out.println("--- Melong Player ---");
			System.out.println("1. 음악 목록 전체 조회");
			System.out.println("2. 조건에 맞는 목록 조회");
			System.out.println("3. 나의 뮤직 리스트 메뉴");
			System.out.println("4. 좋아요 누르기");
			System.out.println("0. 프로그램 종료");
			System.out.println("메뉴 선택 >> ");
			sel = sc.nextInt();
			sc.nextLine();
			
			switch (sel) {
			case 1: selectAll(); break;
			case 2: selectConditionMenu(); break;
			case 3: myMusicListMenu(); break;
			case 4: incFavoriteCount(); break;
			case 0: System.out.println("프로그램을 종료합니다."); break;
	
			default: System.out.println("잘못 입력하셨습니다. 다시 입력해주세요."); break;
			
			}
		}while(sel != 0);
	
	}
	
	// 1. 음악 목록 전체 조회
	public void selectAll() {
		// service.selectAll()를 호출하여 반환 받은 List를
		// printList(list) 메소드의 매개변수로 전달하여 출력
		
		printList(service.selectAll());
	}
	
	// 전달받은 List 타입 객체에 저장된 모든 Music 정보를 출력하는 메소드
	public void printList(List<Music> list) {
		System.out.println();
		System.out.println("곡 번호  /  곡 제목  /  가수   / 좋아요 수");
		System.out.println("--------------------------------");
		
		// 출력하는 for문 작성!
		for (Music music : list) {
			System.out.println(music.toString());

		}
	}
	
	
	// 2. 조건에 맞는 목록 조회
	public void selectConditionMenu() {
		int sel = 0;
		do {
			System.out.println();
			System.out.println("--- 조건 검색 ---");
			System.out.println("1. 특정 단어가 제목에 포함된 노래 조회");
			System.out.println("2. 특정 단어가 가수명에 포함된 노래 조회");
			System.out.println("3. 좋아요 랭킹순으로 조회");
			System.out.println("0. 메인 메뉴로 돌아가기");
			System.out.println("메뉴 선택 >> ");
			sel = sc.nextInt();
			sc.nextLine();
			
			switch (sel) {
			case 1: selectTitle(); break;
			case 2: selectArtist(); break;
			case 3: selectTopFavoriteCount(); break;
			case 0: System.out.println("메인 메뉴로..."); break;
	
			default: System.out.println("잘못 입력하셨습니다. 다시 입력해주세요."); break;
			
			}
		}while(sel != 0);
	}
	
	// 2-1. 특정 단어가 제목에 포함된 노래 조회
	public void selectTitle() {
		System.out.println("-- 제목 검색 --");
		System.out.print("검색 값 입력 : ");
		String title = sc.nextLine(); // 노래 제목 입력 받기
		
		// 노래 제목을 입력받아 service.selectTitle() 메소드의 매개변수로 전달하고,
		// 반환 받은 List를 printList(list) 메소드의 매개변수로 전달하여 출력
		printList(service.selectTitle(title));
		
	}
	
	// 2-2. 특정 단어가 가수명에 포함된 노래 조회
	public void selectArtist() {
		System.out.println("-- 가수명 검색 --");
		System.out.print("검색 값 입력 : ");
		String artist = sc.nextLine();
		
		 printList(service.selectArtist(artist));
		// 가수명을 입력받아 service.selectArtist() 메소드의 매개변수로 전달하고,
		// 반환 받은 List를 printList(list) 메소드의 매개변수로 전달하여 출력
		
	}
	
	// 2-3. 좋아요 랭킹순으로 조회
	public void selectTopFavoriteCount() {
		printList(service.selectTopFavoriteCount());
		// service.selectTopFavoriteCount()를 호출하여 반환 받은 List를
		// printList(list) 메소드의 매개변수로 전달하여 출력
	}
	
	
	// 3. 나의 뮤직 리스트 메뉴
	public void myMusicListMenu() {
		int sel = 0;
		do {
			System.out.println();
			System.out.println("--- 나의 뮤직 리스트 ---");
			System.out.println("1. 나의 뮤직 리스트 조회");
			System.out.println("2. 뮤직 리스트에 곡 추가(곡 번호)");
			System.out.println("3. 뮤직 리스트에서 제거(곡 번호)");
			System.out.println("0. 메인 메뉴로 돌아가기");
			System.out.println("메뉴 선택 >> ");
			sel = sc.nextInt();
			sc.nextLine();
			
			switch (sel) {
			case 1: selectMyMusicList(); break;
			case 2: addMusicList(); break;
			case 3: removeMusicList(); break;
			case 0: System.out.println("메인 메뉴로..."); break;
	
			default: System.out.println("잘못 입력하셨습니다. 다시 입력해주세요."); break;
			
			}
		}while(sel != 0);
	}
	
	// 3-1. 나의 뮤직 리스트 조회
	public void selectMyMusicList() {
		printList(service.selectMyMusicList());
		// service.selectMyMusicList()를 호출하여 반환 받은 List를
		// printList(list) 메소드의 매개변수로 전달하여 출력
	}

	// 3-2. 나의 뮤직 리스트에 곡 추가(곡 번호)
	public void addMusicList() {
		System.out.println();
		System.out.println("-- 뮤직 리스트에 곡 추가 --");
		System.out.print("곡 번호 입력 : ");
		int musicNo = sc.nextInt();
		sc.nextLine(); // 버퍼에 남아있는 개행 문자 제거
		boolean yn = service.addMusicList(musicNo);
		if(yn == true) System.out.println("추가 성공!");
		else System.out.println("번호를 잘못 입력하였거나, 이미 목록에 추가된 곡입니다.");
		// 곡 번호를 입력받아 service.addMusicList() 메소드의 매개변수로 전달하고,
		// boolean 값을 반환 받아 true면 "추가 성공!"
		// false면 "추가 실패 ....(번호를 잘못 입력하였거나, 이미 목록에 추가된 곡입니다.)" 출력
	}
	
	
	// 3-3. 나의 뮤직 리스트에 곡 제거(곡 번호)
	private void removeMusicList() {
		System.out.println();
		System.out.println("-- 뮤직 리스트에서 곡 삭제 --");
		System.out.print("곡 번호 입력 : ");
		int musicNo = sc.nextInt();
		sc.nextLine();
		
		Music music = service.removeMusicList(musicNo);
		if(music != null) System.out.println(music.toString() + " 이 제거되었습니다.");
		else System.out.println("제거 실패.....(번호를 확인해주세요.)");
		// 곡 번호를 입력받아 service.removeMusicList() 메소드의 매개변수로 전달하고,
		// Music 객체 참조 주소 값을 반환 받아
		// null이 아니면 (삭제된 곡 정보) + " 이 제거되었습니다."
		// null이면 "제거 실패 ....(번호를 확인해주세요.)" 출력
	}

	// 4. 좋아요 누르기
	public void incFavoriteCount() {
		System.out.println();
		System.out.println("-- 좋아요 증가 --");
		System.out.print("곡 번호 입력 : ");
		int musicNo = sc.nextInt();
		sc.nextLine();
		
		service.incFavoriteCount(musicNo);
		// 곡 번호를 입력받아 service.incFavoriteCount() 메소드의 매개변수로 전달해 좋아요 수 증가.
		// (반환값 없음)
	}
}



// MusicRun.java
package com.kh.music.run;

import com.kh.music.view.MusicView;

public class MusicRun {
	public static void main(String[] args) {
		new MusicView().displayMain();
	}
}



태그:

카테고리:

업데이트:

댓글남기기