오늘의 노래 추천 🛸
- 아티스트
- EXO
- 앨범
- DON'T FIGHT THE FEELING - Special Album
- 발매일
- 1970.01.01
- 아티스트
- EXO
- 앨범
- DON'T FIGHT THE FEELING - Special Album
- 발매일
- 1970.01.01
꼭 둘이 같이 들어야 함
DAY 12
* mp3 player 실습 *
음원 불러오기
ㅡ Music class ㅡ
생성자 메서드와 getter 메서드 생성

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

ㅡ 객체 및 ArrayList 생성 ㅡ
ArrayList 의 인덱스번호 idx 를 변수로 생성

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


* MVC *
Model View Controller
* 디자인 패턴
디자인 패턴을 알고 있으면 개발자 간의 의사소통이 용이해짐
공통적으로 발생하는 문제에 대해 재사용 가능한 해결책
소스나 기계 코드로 바로 전환할 수 있는 완성된 디자인은 아님
서로 다른 상황에 맞게 사용될 수 있는 범용성 높은 문제해결 템플릿
공통된 문제들을 해결할 때 쓰이는 형식화된 관행
* MVC
각 코드들의 역할과 책임에 따라 로직을 명확하게 분리하는 패턴
model, view, controller 로 이뤄짐
Model : Data 를 가진 객체 내부의 상태정보
View : 레이아웃 화면 처리
Controller : 사용자 요청 데이터 Model 에 의뢰, 데이터를 View 에 반영

ㅡ 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


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

ㅡ stop ( ) 메서드 생성

[ startAndPrint 메서드 ]
main 밖의 메서드에서도 musicList 와 idx 변수를 이용하기 위해 이번에는
ㅡ 매개변수로 받아주기
ㅡ startAndPrint ( ) 메서드 생성

2 * model, view, controller 로 분류하기
ㅡ model, view, controller 패키지 생성

music class 를 model 패키지에 붙여 넣기
2-1 * model, controller
ㅡ model 패키지에 음악을 저장하는 SaveMusic 클래스 생성

ㅡ 음악을 ArrayList 에 저장하는 코드를
model 패키지 SaveMusic 클래스에 불러오기

캡처 길어짐 방지 생략했음
ArrayList 를 생성하는 코드는 생성자 코드에 작성함
같은 패키지 내에서 ArrayList 객체를 불러올 수 있도록 접근제한자 public 사용
ㅡ controller 패키지의 MusicMain 클래스에
SaveMusic 타입의 객체를 생성하고 ArrayList<Music> 타입의 ' musicList ' 변수에 저장

model 패키지에 있는 음악을 저장하는 코드를 불러오게 된 것
2-2 * view 패키지 MusicPrint 클래스에 입출력문 넣어주기
ㅡ Scanner 를 view 패키지 필드 영역에 생성

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


ArrayList 타입의 musiciList와 idx 매개변수를 받아줘야 함
ㅡ controller 패키지의 MusicMain 클래스에
MusicPrint 타입의 객체 mp 를 생성

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

MusicPrint 의 mainPrint 메서드 불러오기
ㅡ MusicMain 의 반복문에 startPrint 메서드 입력하기

정지, 시작 등 메서드 로직들을 넣어주기 위해
2-3 * controller 패키지에 MusicService 클래스 생성


ㅡ MP3Player mp3 객체를 (static 영역에서는 제외)
MusicSerive 클래스의 필드영역에 넣어주기

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

그대로 복붙했음
ㅡ MusicService 클래스에 다음곡 메서드 생성하기

idx 를 파라미터로 불러와 내부적으로 사용하고
그 결과를 return 해줘야 함
ㅡ MusicService 클래스에 이전곡 메서드 생성하기

마찬가지로 idx 값을 return
3 * MusicMain 완성하기
ㅡ controller 패키지의 MusicMain 클래스에
MusicService 타입의 객체 ms 를 생

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

n = 2, 3 에서는 return 된 idx 값을 main 영역에서 초기화 해주
4 * 최종
ㅡ 최종 MusicMain 클래스 코드 ㅡ


* JDBC *
Java DataBase Connectivity
자바 프로그램이 관계형 데이터베이스 ( DB ) 와 연결되어
데이터를 주고받을 수 있게 하는 인터페이스 기반 자바 API

* JDBC 의 과정
1. 드라이버 로딩
2. DB 연결
3. Query 전송
4. 결과를 이용한 작업처리
5. 자원반납
ㅡ 오라클에서 테이블 생성 ㅡ

COMMIT 해주기
1 * 드라이버 로딩







배포일때는 x, 개발일 때만 사용
2 * DB 연결
url ( 연결경로 ) , username, password
ㅡ url (연결경로) , username, password 불러오기


ㅡ Connection 으로 메서드 불러오기
Connection : DB 와의 연결을 나타내는 인터페이스


ㅡ conn 참조 변수 생성하기

DriverManager.getConnection 의 리턴타입은 Connection
리턴타입이 Connection 인 conn 생성

conn ㅡ> 메소드 호출의 반환 값을 받는 참조 변수
3 * Query 문 작성
ㅡ 문자열 sql 변수에 Query 문 넣어주기

테이블 컬럼에 값을 넣어주는 INSERT INTO 를 사용해 값 넣기
ㅡ 사용자 입력 받아주기 ( Scanner 사용 )


? 인자를 사용해 값을 비워둠
ㅡ url (연결경로) , use


자료형이 PreparedStatement
sql 쿼리문을 규격에 맞게 보내주기 위해 conn 사용
ㅡ 데이버 바인딩 해주기 ( ? 인자에 값 넣기 )

작성해준 쿼리문에 ? 인자를 하나의 인덱스로 생각
? 인자의 개수만큼 인덱스의 크기가 결정되는 것
4 * 실행
ㅡ url (연결경로) , use

SELECT , DELETE , UPDATE 같은 명령에는 executeUpdate ( ) 사용
executeUpdate ( ) 는 전송을 위한 메서드로, DB 에 직접적으로 영향을 줌



오라클에서 테이블 전체 정보 조회
5 * 자원 반납
try 구문에서 예외가 발생하면 catch 구문으로 넘어가버리는 문제 발생
finally ㅡ> try 구문에서 예외상황이 발생했더라도 반드시 들어오는 공간
자원반납은 * 필수 이기 때문에 ㅡ> finally 공간에서 구현

catch 구문 뒤에 붙여줌
ㅡ try 중괄호 밖의 공간에서 PreparedStatement psmt 과 Connection conn 초기화

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

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





Bye
'JAVA' 카테고리의 다른 글
DAY 13 ( JDBC 오라클 [ 로그인, 회원정보 삭제, 조회, 수정 ] 실습 ) (0) | 2024.06.05 |
---|---|
Java Festival 최종 (0) | 2024.06.04 |
DAY 11 ( 추상클래스, 인터페이스, MVC, jar 파일 추가, mp3 불러오기 실습 ) (0) | 2024.06.03 |
DAY 10 ( 생성자, VO, 상속, 오버라이딩, 객체 casting, ArrayList ) (1) | 2024.05.31 |
DAY 9 ( method, 객체지향(OOP), OOP 실습, 부록 : 메모리) (0) | 2024.05.30 |