JAVA

DAY 12 ( MP3Player 실습, MVC 패턴 실습(refactoring), JDBC )

도키마 2024. 6. 4. 12:26

 

 

 

 

오늘의 노래 추천 🛸

 

 
파라다이스 (Paradise)
아티스트
EXO
앨범
DON'T FIGHT THE FEELING - Special Album
발매일
1970.01.01
 
훅! (No matter)
아티스트
EXO
앨범
DON'T FIGHT THE FEELING - Special Album
발매일
1970.01.01

 

꼭 둘이 같이 들어야 함

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 DAY 12

 

 

 

 

 

 

 

 

 

 

 

 

 

 


 

 

 

 

 

 

 

 

 

 

 

 

 

 

* mp3 player 실습 *

음원 불러오기

 

 

 

 

 

 

 

 

 

 

 

 

 

 

ㅡ Music class ㅡ

 

생성자 메서드와 getter 메서드 생성

 

music class

 

 

 

 

ㅡ Main class 작성 ㅡ

 

music 이라는 객체를 담아주기 위한 ArrayList 생성

 

 

 

 

ㅡ 객체 및 ArrayList 생성 ㅡ

 

ArrayList 의 인덱스번호 idx 를 변수로 생성

객체 생성

 

 

 

 

 

ㅡ 실행을 위한 반복문 작성 ㅡ

 

 

 

 


 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

* MVC *

Model View Controller

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

* 디자인 패턴

 

 

디자인 패턴을 알고 있으면 개발자 간의 의사소통이 용이해짐

 

공통적으로 발생하는 문제에 대해 재사용 가능한 해결책

 소스나 기계 코드로 바로 전환할 수 있는 완성된 디자인은 아님

서로 다른 상황에 맞게 사용될 수 있는 범용성 높은 문제해결 템플릿

공통된 문제들을 해결할 때 쓰이는 형식화된 관행

 

 

 

 


* MVC

 

 

각 코드들의 역할과 책임에 따라 로직을 명확하게 분리하는 패턴

model, view, controller 로 이뤄짐

 

 

Model : Data 를 가진 객체 내부의 상태정보

 

View : 레이아웃 화면 처리

 

Controller : 사용자 요청 데이터 Model 에 의뢰, 데이터를 View 에 반영

 

 

 

 

MVC 패턴

 

 

 

 

 

 

 


 

 

 

 

 

ㅡ MP3Player 을 MVC 로 나타내기 ㅡ

 리팩토링 refactoring

 

 

 

 

 

1 * 공통사항을 뽑아 메서드 생성 

 

if ( mp3.isPlaying ( ) ) {

mp3.stop ( ) ;

}

 이거랑

System.out.println("🎵🎵🎵 실행되는 노래 🎵🎵🎵");

System.out.println("노래 제목 \t\t 가수 이름");

System.out.println(musicList.get(idx).getTitle() + "\t\t" + musicList.get(idx).getSinger());

이거 반복됨

 

ㅡ> 메서드로 만들어주자

 

 

 

 

[ stop 메서드 ]

 

main 밖의 메서드에서도 mp3 객체를 사용하기 위해

ㅡ mp3 를 전역변수로 올려주기

 

전역변수

 

 


 

error 해결방법

1. Surround try / catch

 

try / catch

 

try catch 실습

 

 

2. mp3 를 static 영역으로 올려주기

 

static

 


 

 

ㅡ stop ( ) 메서드 생성

 

stop 메서드

 

 

 

 

[ startAndPrint 메서드 ]

 

 

main 밖의 메서드에서도 musicList 와 idx 변수를 이용하기 위해 이번에는

ㅡ 매개변수로 받아주기

 

 

 

 

ㅡ startAndPrint ( ) 메서드 생성

 

startAndPrint 메서드

 

 

 

 

 

 

 

2 * model, view, controller 로 분류하기

 

 

 

 

 

ㅡ model, view, controller 패키지 생성

 

패키지 생성

 

music class 를 model 패키지에 붙여 넣기

 

 

 

 

 

2-1 * model, controller

 

 

 

 

 

ㅡ model 패키지에 음악을 저장하는 SaveMusic 클래스 생성

 

 

ArrayList 에 음악정보 저장하는 코드

 

 

 

 

ㅡ 음악을 ArrayList 에 저장하는 코드를

model 패키지 SaveMusic 클래스에 불러오기

 

 

SaveMusic 클래스

캡처 길어짐 방지 생략했음

 

 

ArrayList 를 생성하는 코드는 생성자 코드에 작성함

같은 패키지 내에서 ArrayList 객체를 불러올 수 있도록 접근제한자 public 사용

 

 

 

 

ㅡ controller 패키지의 MusicMain 클래스에

SaveMusic 타입의 객체를 생성하고 ArrayList<Music> 타입의 ' musicList ' 변수에 저장

 

 

 

model 패키지에 있는 음악을 저장하는 코드를 불러오게 된 것

 

 

 

 

 

 

 

2-2 * view 패키지 MusicPrint 클래스에 입출력문 넣어주기

 

 

 

 

 

ㅡ Scanner 를 view 패키지 필드 영역에 생성

 

Scanner 생성

 

 

 

 

ㅡ MusicPrint 클래스에 출력문 메서드 생성해 주기

 

mainPrint 메서드

 

startPrint 메서드

 

ArrayList 타입의 musiciList와 idx 매개변수를 받아줘야 함

 

 

 

 

 

ㅡ controller 패키지의 MusicMain 클래스에

MusicPrint 타입의 객체 mp 를 생성

 

MusicPrint 타입 객체 생성

 

 

 

 

ㅡ 반복문 안에 변수 n 생성해 주기

 

변수 n

 

MusicPrint 의 mainPrint 메서드 불러오기

 

 

 

 

ㅡ MusicMain 의 반복문에 startPrint 메서드 입력하기

 

startPrint 메서드 입력

 

 

 

 

 

 

 

 

정지, 시작 등 메서드 로직들을 넣어주기 위해

2-3 * controller 패키지에 MusicService 클래스 생성

 

 

 

 

 

패키지, 클래스 중간점검

 

패키지, 클래스 구조 중간점검

 

 

 

 

 

ㅡ MP3Player mp3 객체를 (static 영역에서는 제외)

MusicSerive 클래스의 필드영역에 넣어주기

 

mp3 객체 불러오기

 

 

 

 

ㅡ MusicService 클래스에 정지, 시작 메서드 생성하기

 

stop start 메서드

 

그대로 복붙했음

 

 

 

 

ㅡ MusicService 클래스에 다음곡 메서드 생성하기

 

next 메서드

 

idx 를 파라미터로 불러와 내부적으로 사용하고

그 결과를 return 해줘야 함

 

 

 

 

ㅡ MusicService 클래스에 이전곡 메서드 생성하기

 

pre 메서드

 

마찬가지로 idx 값을 return

 

 

 

 

 

 

 

3 * MusicMain 완성하기

 

 

 

 

 

ㅡ controller 패키지의 MusicMain 클래스에

MusicService 타입의 객체 ms 를 생

 

MusicService 객체 생성

 

 

 

 

ㅡ 반복문 내에 ms. 메서드 불러오기

 

메서드 불러오기

 

n = 2, 3 에서는 return 된 idx 값을 main 영역에서 초기화 해주



 

 

 

 

 

4 * 최종

 

 

 

 

 

 

ㅡ 최종 MusicMain 클래스 코드 ㅡ

 

 

import 및 객체 생성
반복문



 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

* JDBC *

Java DataBase Connectivity

 

 

 

 

 

 

 

 

 

 

 

자바 프로그램이 관계형 데이터베이스 ( DB ) 와 연결되어

데이터를 주고받을 수 있게 하는 인터페이스 기반 자바 API

 

 

 

 

 

JDBC API

 

 

 

 

 

* JDBC 의 과정

 

 

 

1. 드라이버 로딩

 

2. DB 연결

 

3. Query 전송

 

4. 결과를 이용한 작업처리

 

5. 자원반납

 

 

 

 

 

 

 

 

ㅡ 오라클에서 테이블 생성 ㅡ

 

테이블 생성

 

COMMIT 해주기

 

 

 

 

 

1 * 드라이버 로딩

 

 

 

드라이버 로딩

 

 


 

 

Class 파일 불러오기
Add External JARs
ojdbc6
확인

 


 

 

try catch 선택

 

try catch 구문

 

배포일때는 x, 개발일 때만 사용

 

 

 

 

2 * DB 연결

 

url ( 연결경로 ) , username, password

 

 

 

 

ㅡ url (연결경로) , username, password 불러오기

 

url

 

url, username, password 불러오기

 

 

 

 

ㅡ Connection 으로 메서드 불러오기

 

 

ConnectionDB 와의 연결을 나타내는 인터페이스

 

Add catch clause to surrounding try

 

코드 중간 점검

 

 

 

 

ㅡ conn 참조 변수 생성하기

 

conn 생성

 

DriverManager.getConnection 의 리턴타입은 Connection

리턴타입이 Connection 인 conn 생성

 

연결 확인

 

conn ㅡ> 메소드 호출의 반환 값을 받는 참조 변수



 

 

3 * Query 문 작성

 

 

 

 

ㅡ 문자열 sql 변수에 Query 문 넣어주기

 

 

테이블 컬럼에 값을 넣어주는 INSERT INTO 를 사용해 값 넣기

 

 

 

 

ㅡ 사용자 입력 받아주기 ( Scanner 사용 )

 

입력 받아주기

 

? 인자

 

? 인자를 사용해 값을 비워둠

 

 

 

 

 

ㅡ url (연결경로) , use

 

 

 

자료형이 PreparedStatement

sql 쿼리문을 규격에 맞게 보내주기 위해 conn 사용

 

 

 

ㅡ 데이버 바인딩 해주기 ( ? 인자에 값 넣기 )

 

setString, setInt


작성해준 쿼리문에 ? 인자를 하나의 인덱스로 생각

? 인자의 개수만큼 인덱스의 크기가 결정되는 것

 

 

 

 

 

 

 

4 * 실행

 

 

 

 

ㅡ url (연결경로) , use

 

Query 문 실행

 

SELECT , DELETE , UPDATE 같은 명령에는 executeUpdate ( ) 사용

executeUpdate ( ) 는 전송을 위한 메서드로, DB 에 직접적으로 영향을 줌

 

쿼리문 실행 확인

 

출력

 

오라클 출력

 

오라클에서 테이블 전체 정보 조회

 

 

 

 

 

 

 

5 * 자원 반납

 

 

 

 

try 구문에서 예외가 발생하면 catch 구문으로 넘어가버리는 문제 발생

 

finally ㅡ> try 구문에서 예외상황이 발생했더라도 반드시 들어오는 공간

자원반납은 * 필수 이기 때문에 ㅡ> finally 공간에서 구현

 

 

finally

 

catch 구문 뒤에 붙여줌

 

 

 

 

try 중괄호 밖의 공간에서 PreparedStatement psmt 과 Connection conn 초기화

 

 

 

 

 

finally 공간 안에서 psmt.close ( ) conn.close ( ) 작성해 DB 연결 종료해주기

 

자원반납

 

사용한 것의 역순으로 닫아줘야 함 psmt ㅡ> conn

 

 

 

* 최종 *

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Bye