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();
}
}
댓글남기기