ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • JAVA MVC패턴
    back-end&DB/Java 2023. 5. 22. 12:31
    728x90

    1.MVC패턴

     

    - Model

    실행에 직접적인 관여 X

    데이터를 담거나 데이터를 보내거나 , 수정, 삭제하는 객체

    - Controller

    어플리케이션의 행위를 정의

    사용자가 데이터를 수정하고 요청 하는것에 대한 이벤트를 처리하는 부분

    - View

    Model 데이터를 기반으로 실제 사용자에게 보여지는 페이지

     

     

    1.1 MVC 패턴을 사용하는 이유?

    view 로직과 비즈니스 로직을 분리하여, 각자의 역활에 집중하여 개발 가능

    유지보수가 편리

    어플리케이션의 확장성과 유연성 증가

    중복코딩 문제점 해결

     

     

    2. 실습

    - 뮤직 플레이 만들기!

     

    2.1 view 만들기!

    view 역할 : 사용자 인터페이스(화면을 보거나, 선택을 하게 하는 기능)
    ex) 재생, 정지, 다음곡, 이전곡, 프로그램 종료

    package View;
    
    import java.util.Scanner;
    
    public class View {
    	public static void main(String[] args) {
    		
    		Scanner sc = new Scanner(System.in);
    	    System.out.println(				"     ___           ___           ___                      ___           ___           ___           ___           ___                       ___                       ___           ___ ");
    		System.out.println(				"    /\\  \\         /\\__\\         /\\  \\        ___         /\\__\\         /\\  \\         /\\  \\         /\\__\\         /\\  \\                     /\\  \\                     /\\__\\         /\\  \\  ");
    		System.out.println(				"    \\:\\  \\       /:/ _/_       _\\:\\  \\      /\\__\\       /:/ _/_       /::\\  \\        \\:\\  \\       /:/ _/_       /::\\  \\                   /::\\  \\         ___       /:/ _/_       /::\\  \\");
    		System.out.println(				"     \\:\\  \\     /:/ /\\__\\     /\\ \\:\\  \\    /:/__/      /:/ /\\__\\     /:/\\:\\  \\        \\:\\  \\     /:/ /\\  \\     /:/\\:\\__\\                 /:/\\:\\  \\       /|  |     /:/ /\\__\\     /:/\\:\\__\\");
    		System.out.println(				" _____\\:\\  \\   /:/ /:/ _/_   _\\:\\ \\:\\  \\  /::\\  \\     /:/ /:/ _/_   /:/ /::\\  \\   _____\\:\\  \\   /:/ /::\\  \\   /:/ /:/  /  ___     ___   /:/ /::\\  \\     |:|  |    /:/ /:/ _/_   /:/ /:/  / ");
    		System.out.println(				"/::::::::\\__\\ /:/_/:/ /\\__\\ /\\ \\:\\ \\:\\__\\ \\/\\:\\  \\   /:/_/:/ /\\__\\ /:/_/:/\\:\\__\\ /::::::::\\__\\ /:/_/:/\\:\\__\\ /:/_/:/  /  /\\  \\   /\\__\\ /:/_/:/\\:\\__\\    |:|  |   /:/_/:/ /\\__\\ /:/_/:/  /");
    		System.out.println(				"\\:\\~~\\~~\\/__/ \\:\\/:/ /:/  / \\:\\ \\:\\/:/  /  ~~\\:\\  \\  \\:\\/:/ /:/  / \\:\\/:/  \\/__/ \\:\\~~\\~~\\/__/ \\:\\/:/ /:/  / \\:\\/:/  /   \\:\\  \\ /:/  / \\:\\/:/  \\/__/  __|:|__|   \\:\\/:/ /:/  / \\:\\/:/  /");
    		System.out.println(				" \\:\\  \\        \\::/_/:/  /   \\:\\ \\::/  /      \\:\\__\\  \\::/_/:/  /   \\::/__/       \\:\\  \\        \\::/ /:/  /   \\::/__/     \\:\\  /:/  /   \\::/__/      /::::\\  \\    \\::/_/:/  /   \\::/__/~~~~");
    		System.out.println(				"  \\:\\  \\        \\:\\/:/  /     \\:\\/:/  /       /:/  /   \\:\\/:/  /     \\:\\  \\        \\:\\  \\        \\/_/:/  /     \\:\\  \\      \\:\\/:/  /     \\:\\  \\      ~~~~\\:\\  \\    \\:\\/:/  /     \\:\\  \\");
    		System.out.println(				"   \\:\\__\\        \\::/  /       \\::/  /       /:/  /     \\::/  /       \\:\\__\\        \\:\\__\\         /:/  /       \\:\\__\\      \\::/  /       \\:\\__\\          \\:\\__\\    \\::/  /       \\:\\__\\");
    		System.out.println(				"    \\/__/         \\/__/         \\/__/        \\/__/       \\/__/         \\/__/         \\/__/         \\/__/         \\/__/       \\/__/         \\/__/           \\/__/     \\/__/         \\/__/");
    
    		while (true) {
    			System.out.println("[1]재생 [2]정지 [3]다음곡 [4]이전곡 [5]종료");
    			int num = sc.nextInt();
    
    			if (num == 1) {
    
    			} else if (num == 2) {
    
    			} else if (num == 3) {
    
    			} else if (num == 4) {
    
    			} else if (num == 5) {
    				System.out.println("프로그램을 종료합니다.");
    				break;
    			} else {
    				System.out.println("숫자를 잘못 입력하셨습니다.");
    			}
    
    		}
    
    	}
    }

     

     

    2.2 Model 만들기

     

    - 생성자 만들기
    생성자 : 객체를 생성하는 순간 자동으로 호출되는 메소드
    주요역활 : 객체를 생성함과 동시에 필드에 값 적용

     

    - 생성자의 특징
    1. 리턴타입이 없다.(void키워드도 사용 X)
    2. 생성자 메소드는 클래스 이름과 동일하다.
    3. new 키워드를 통해서만 호출 되는 메소드

     

    package Model;
    
    public class MisicVo {
    	// Music 플레이리스트 설계도 구성
    	// VO(value Object)	
    	//필드(제목, 가수, 음악길이, 경로)
    	
    	private String name;
    	private String singer;
    	private int PlayTime;
    	private String musicPath;
    	
    	public MisicVo(String name, String singer, int playTime, String musicPath) {
    		this.name = name;
    		this.singer = singer;
    		this.PlayTime = playTime;
    		this.musicPath = musicPath;
            
            // gatter 입력 자리
    	}	
    }

     

    - getter
    getter > 필드에 저장된 값을 불러올 때
    setter > 필드에 값을 저장 할때
    Alt + Shift + s (= 오른쪽 마우스 Source)

    	public String getName() {
    		return name;
    	}
    	public String getSinger() {
    		return singer;
    	}
    	public int getPlayTime() {
    		return PlayTime;
    	}
    	public String getMusicPath() {
    		return musicPath;
    	}

     

     

    2.3 Controller

     

    controller 역할 : 비즈니스 로직 작성
    View로부터 데이터를 받아서 가공/처리 하는 역할
    Model의 데이터를 가져오거나 수정 하는 역할

    곡 5개를 저장할수 있는 ArrayList 생성
    곡 5개의 제목, 가수, 플레이시간, 경로를 담아야해서 데이터타입으로 MusicVO를 작성

    package Controller;
    
    import java.util.ArrayList;
    import Model.MisicVo;
    import javazoom.jl.player.MP3Player;
    
    public class Controller {
    	
    	ArrayList<MisicVo> musicList = new ArrayList<>();
        
        // mp3 객체 호출
        
        // Controller 생성자 작성
        
        // 각 기능 메소드 만들기
    	}
    }


    - 노래를 재생 할 수 있는 라이브러리

    player.jar
    0.14MB

    외부라이브러리 프로젝트에 추가 방법
    1. 프로젝트 오른쪽마우스

    2. Build path

    3. Configure Build path

    4. Libraries

    5. Add external jars

    6. 외부jar파일 추가

    7. Add and close

    // mp3 재생, 정지 할 수 있는 기능을 가지고 있는 객체 호출
    MP3Player mp3 = new MP3Player();


    Controller 생성자 > Controller가 호출되자마자 곡을 세팅

    public Controller() {
    // MisicVo m = new MisicVo("attention", "뉴진스", 30, "music/attention.mp3");
    // musicList.add(m);
    // 위의 내용을 1줄 코드로 작성이 가능
     	musicList.add(new MisicVo("attention", "뉴진스", 30, "music/attention.mp3"));
     	musicList.add(new MisicVo("cookie", "뉴진스", 500, "music/cookie.mp3"));
     	musicList.add(new MisicVo("dotto", "뉴진스", 100, "music/dotto.mp3"));
     	musicList.add(new MisicVo("hypeboy", "뉴진스", 120, "music/hypeboy.mp3"));
     	musicList.add(new MisicVo("OMG", "뉴진스", 118, "music/OMG.mp3"));
    }

     

     

    2,4 각 기능 메소드 만들기

     

    - 재생

    	public void play() {
    		// 현재 재생중인 곡이 있는지?
    		if(mp3.isPlaying()) {
    			mp3.stop(); // 현재 재생중인 곡 정지
    		}
    		// 음악 재생
    		mp3.play(musicList.get(index).getMusicPath());
    		
    		//음악 정보 출력
    		System.out.println(musicList.get(index).getSinger()+ " - " + musicList.get(index).getName());
    		
    	}

     

    - 정지

    	public void stop() {
    		mp3.stop();
    	}

     

    - 다음곡

    	public void next() {
    		if(index < musicList.size()-1) {
    		index++;
    		}else {
    			index = 0;
    		}
    		play();
    	}

     

    - 이전곡

    	public void pre() {
    		if(index == 0) { 
    			index = musicList.size()-1;
    		}else {
    			index--;
    		}
    		play();
    	}

     

    2.5 View에 연동하기

    package View;
    
    import java.util.Scanner;
    import Controller.Controller;
    
    public class View {
    	public static void main(String[] args) {
    	
    		Scanner sc = new Scanner(System.in);
    		Controller con = new Controller();
    	    System.out.println(				"     ___           ___           ___                      ___           ___           ___           ___           ___                       ___                       ___           ___ ");
    		System.out.println(				"    /\\  \\         /\\__\\         /\\  \\        ___         /\\__\\         /\\  \\         /\\  \\         /\\__\\         /\\  \\                     /\\  \\                     /\\__\\         /\\  \\  ");
    		System.out.println(				"    \\:\\  \\       /:/ _/_       _\\:\\  \\      /\\__\\       /:/ _/_       /::\\  \\        \\:\\  \\       /:/ _/_       /::\\  \\                   /::\\  \\         ___       /:/ _/_       /::\\  \\");
    		System.out.println(				"     \\:\\  \\     /:/ /\\__\\     /\\ \\:\\  \\    /:/__/      /:/ /\\__\\     /:/\\:\\  \\        \\:\\  \\     /:/ /\\  \\     /:/\\:\\__\\                 /:/\\:\\  \\       /|  |     /:/ /\\__\\     /:/\\:\\__\\");
    		System.out.println(				" _____\\:\\  \\   /:/ /:/ _/_   _\\:\\ \\:\\  \\  /::\\  \\     /:/ /:/ _/_   /:/ /::\\  \\   _____\\:\\  \\   /:/ /::\\  \\   /:/ /:/  /  ___     ___   /:/ /::\\  \\     |:|  |    /:/ /:/ _/_   /:/ /:/  / ");
    		System.out.println(				"/::::::::\\__\\ /:/_/:/ /\\__\\ /\\ \\:\\ \\:\\__\\ \\/\\:\\  \\   /:/_/:/ /\\__\\ /:/_/:/\\:\\__\\ /::::::::\\__\\ /:/_/:/\\:\\__\\ /:/_/:/  /  /\\  \\   /\\__\\ /:/_/:/\\:\\__\\    |:|  |   /:/_/:/ /\\__\\ /:/_/:/  /");
    		System.out.println(				"\\:\\~~\\~~\\/__/ \\:\\/:/ /:/  / \\:\\ \\:\\/:/  /  ~~\\:\\  \\  \\:\\/:/ /:/  / \\:\\/:/  \\/__/ \\:\\~~\\~~\\/__/ \\:\\/:/ /:/  / \\:\\/:/  /   \\:\\  \\ /:/  / \\:\\/:/  \\/__/  __|:|__|   \\:\\/:/ /:/  / \\:\\/:/  /");
    		System.out.println(				" \\:\\  \\        \\::/_/:/  /   \\:\\ \\::/  /      \\:\\__\\  \\::/_/:/  /   \\::/__/       \\:\\  \\        \\::/ /:/  /   \\::/__/     \\:\\  /:/  /   \\::/__/      /::::\\  \\    \\::/_/:/  /   \\::/__/~~~~");
    		System.out.println(				"  \\:\\  \\        \\:\\/:/  /     \\:\\/:/  /       /:/  /   \\:\\/:/  /     \\:\\  \\        \\:\\  \\        \\/_/:/  /     \\:\\  \\      \\:\\/:/  /     \\:\\  \\      ~~~~\\:\\  \\    \\:\\/:/  /     \\:\\  \\");
    		System.out.println(				"   \\:\\__\\        \\::/  /       \\::/  /       /:/  /     \\::/  /       \\:\\__\\        \\:\\__\\         /:/  /       \\:\\__\\      \\::/  /       \\:\\__\\          \\:\\__\\    \\::/  /       \\:\\__\\");
    		System.out.println(				"    \\/__/         \\/__/         \\/__/        \\/__/       \\/__/         \\/__/         \\/__/         \\/__/         \\/__/       \\/__/         \\/__/           \\/__/     \\/__/         \\/__/");
    
    		while (true) {
    			System.out.println("[1]재생 [2]정지 [3]다음곡 [4]이전곡 [5]종료");
    			int num = sc.nextInt();
    
    			if (num == 1) {
    				con.play();
    				
    			} else if (num == 2) {
    				con.stop();
    			} else if (num == 3) {
    				con.next();
    			} else if (num == 4) {
    				con.pre();
    			} else if (num == 5) {
    				System.out.println("프로그램을 종료합니다.");
    				break;
    			} else {
    				System.out.println("숫자를 잘못 입력하셨습니다.");
    			}
    
    		}
    
    	}
    }

     

    3. 실행화면

     

    4. 아래와 같이 오류 발생시 

    Exception in thread "main" java.lang.NoClassDefFoundError: javazoom/jl/player/MP3Playe

     

    - java Compiler 에서 JDK Compliance를 1.8로 변경 후

    - 라이브러리에서 palyer remove(삭제)후 저장

    - 다시 Add external jars 후 저장

    728x90

    'back-end&DB > Java' 카테고리의 다른 글

    JAVA JDBC과 API  (0) 2023.05.24
    JAVA 추상과 인터페이스  (0) 2023.05.22
    JAVA 상속과 오버라이딩(Overriding)  (0) 2023.05.19
    JAVA 생성자와 접근제한자  (0) 2023.05.19
    JAVA 객체 지향 프로그래밍(OOP)  (0) 2023.05.18
Designed by Tistory.