MVC 패턴이란?
Model , View , Controller 의 약자
view -> controller -> model의 요청
model -> view -> controller 의 응답
MVC를 이용해 도서 찾기 프로그램 만들기
필드 (vo -> 모델에 해당)
public class Book {
private int bNo;
private int category;
private String title;
private String author;
public Book() {}
//dto 부분 만들었음
public Book(int category, String title, String author) {
super();
this.category = category;
this.title = title;
this.author = author;
}
public int getbNo() {
return bNo;
}
public void setbNo(int bNo) {
this.bNo = bNo;
}
public int getCategory() {
return category;
}
public void setCategory(int category) {
this.category = category;
}
public String getTitle() {
return title;
}
public void setTitle(String title) {
this.title = title;
}
public String getAuthor() {
return author;
}
public void setAuthor(String author) {
this.author = author;
}
@Override
public String toString() {
String str = " ";
switch(category) {
case 1:
str="인문";
break;
case 2:
str="자연과학";
break;
case 3:
str="의료";
break;
case 4:
str="기타";
break;
} //필드 값 문자열 합친 후 리턴 category 분류 별로 출력 >>1: 인문 /2: 자연과학
//3 : 의료 / 4 : 기타
return "도서번호= " + bNo + ", 분류= " + str + ", 제목= " + title + ", 저자= " + author + "]";
}
}
view
import java.util.ArrayList;
import java.util.Scanner;
import com.collection.silsub1.Controller.BookManager;
import com.collection.silsub1.Model.vo.Book;
public class BookMenu {
private Scanner sc = new Scanner(System.in);
private BookManager bm = new BookManager();
public BookMenu() {} //기본생성자
public void mainMenu() {
while(true) {
System.out.println("----도서 관리 프로그램----");
System.out.println("1. 새 도서 추가 ");
System.out.println("2. 도서 정도 정렬 후 출력");
System.out.println("3. 도서 삭제");
System.out.println("4. 도서 검색 출력");
System.out.println("5. 전체 출력");
System.out.println("6. 끝내기 ");
System.out.print("메뉴 선택: ");
int num = sc.nextInt();
sc.nextLine();
switch(num) {
case 1:
Book inBook = inputBook();
bm.addBook(inBook);
break;
case 2:
bm.printBookList(bm.sortedBookList());
break;
case 3:
int res = bm.deleteBook(inputBookNo());
if(res>0) {
System.out.println("성공적으로 삭제되었습니다.");
}else {System.out.println("삭제할 책이 존재하지않습니다.");}
break; //삭제할책을 1로지정했으니 0보다 크면 삭제
case 4:
int index = bm.searchBook(inputBookTitle());
if(index == -1) {
System.out.println("조회한 책이 존재하지 않습니다.");
}else {
System.out.println(bm.selectBook(index));
//인덱스랑일치하는 책을 선택해서 출력해라
}break;
case 5:
ArrayList<Book> list = bm.selectAll();
if(list.isEmpty()) {
System.out.println("도서가 없습니다.");
}else {
for(Book b: list) {
System.out.println(b);
}
}break;
case 6:
System.out.println("프로그램을 종료합니다.");
return;
}
}//도서관리 프로그램에 해당하는 메인 메뉴 출력, 각 메뉴에 해당 하는 BookManager 클래스의
//메소드 실행 반복 출력되게 함
}
public Book inputBook() {
System.out.println("제목: ");
String title = sc.nextLine();
System.out.print("장르(1.인문/2.자연과학/3.의료/4.기타) 숫자로 입력: ");
int category = sc.nextInt();
System.out.print("저자: ");
sc.nextLine();
String author = sc.nextLine();
return new Book(category, title , author);
//Book 객체의 필드 값을 키보드 로 입력 받아 초기화 하고 객체 리턴
}
public int inputBookNo() {
System.out.print("도서 번호: ");
int no = sc.nextInt();
sc.nextLine();
return no;
//삭제할 도서번호를 키보드로 입 력 받아 리턴
}
public String inputBookTitle() {
System.out.println("도서 제목 : ");
String title = sc.nextLine();
return title;
}//검색할 도서제목을 키보드로 입 력 받아 리턴
}
controller
import java.util.ArrayList;
import java.util.Scanner;
import com.collection.silsub1.Model.dao.BookDao;
import com.collection.silsub1.Model.vo.Book;
public class BookManager {
private BookDao bd = new BookDao();
private Scanner sc = new Scanner(System.in);
// 입력받는 객채 , 메소드 실행 객체 생성
public BookManager() { //기본생성자
}
public void addBook(Book book) {
try {
book.setbNo(bd.getLastBookNo() + 1);
} catch (IndexOutOfBoundsException e) {
book.setbNo(1);
}
bd.addBook(book);
}//전달받은 Book객체의 도서번호 를 setter메소드를 통해 설정 -> BookDao의 addBook()
// 메소드로 해당 Book객체 전달
public int deleteBook(int no) {
return bd.deleteBook(no);
}//전달받은 도서 번호를 BookDao 의 deleteBook() 메소드로 전달하고 그 결과 값을 리턴
public int searchBook(String title) {
return bd.searchBook(title);
}//전달받은 도서 제목을 BookDao 의 searchBook() 메소드로 전달 하고 그 결과 값
//(해당 도서 인덱 스) 리턴
public Book selectBook(int index) {
return bd.selectBook(index);
}//전달받은 인덱스를 BookDao의 selectBook()
//메소드로 전달하고 그 결과 값(해당 도서 객체) 리턴
public ArrayList<Book> selectAll() {
return bd.selectAll();
}//BookDao의 selectAll() 메소드를 통해 전달 받은 도서 전체 리스 트를 리턴
public Book[] sortedBookList() {
ArrayList<Book> list = bd.sortedBookList();
Book[] bk = new Book[list.size()];
for (int i = 0; i < bk.length; i++) {
bk[i] = list.get(i);
}
return bk;
}//BookDao의 sortedBookList() 메 소드를 통해 전달 받은 정렬된 도서 전체 리스트를
// for문을 통 해 Book[] 배열에 넣고 리턴
public void printBookList(Book[] br) {
for (Book tmp : br)
System.out.println(tmp);
}
} // 전달 받은 Book[] 배열을 for each문을 이용하여 출력
Model(dao)
import java.util.ArrayList;
import com.collection.silsub1.Model.comparator.AscCategory;
import com.collection.silsub1.Model.vo.Book;
public class BookDao {
private ArrayList<Book> bookList;
public BookDao() {
bookList = new ArrayList<Book>();
}//기본 생성자 bookList 객체 생성함
public BookDao(ArrayList<Book> bookList) {
super();
this.bookList = bookList;
}//매개변수 생성자 , 다른 리스트를 전달 받아 bookList의 초기값으로 사용함
public int getLastBookNo() {
return bookList.get(bookList.size()-1).getbNo();
//마지막책의 번호를 가져오겠다.
}
//새 도서 추가
public void addBook(Book book) {
bookList.add(book);
}//전달받은 도서 객체 bookList에 추가
//도서 삭제
public int deleteBook(int no) {
int res = 0; //결과 값 저장
for (int i = 0; i <bookList.size(); i++) {
if (bookList.get(i).getbNo() == no) {
bookList.remove(i);
res = 1;
break;
} //책의 번호를 다 뒤져보고 , 메뉴에서 입력한 번호와 숫자가같으면 res를 1 로 처리하겠다.
}
return res;
}
//도서 검색
public int searchBook(String title) {
//제목이 일치하는 책의 인덱스를 찾기
int index = -1;
for(int i =0; i < bookList.size(); i ++) {
if(bookList.get(i).getTitle().equals(title)) {
index = i ;
break;
}
}
return index;
}//전달받은 도서 제목을 포함하는 bookList의 인덱스 리턴
//인덱스값에 해당하는 book객체를 arratlist에서 찾아 리턴
public Book selectBook(int index) {
return bookList.get(index);
}
//전체 출력
public ArrayList<Book> selectAll(){
return bookList;
}
//정렬 후 list 리턴
public ArrayList<Book> sortedBookList(){
bookList.sort(new AscCategory());
return bookList;
}
}
DAO DTO VO?
- DAO : Data Access Object 의 약자로 DB에 접근하기 위한 객체
- DTO : Data transfer Object 의 약자로 계층간 데이터 교환을 위한 Java Bean 을 의미 , getter setter 메소드만 가진 클래스
- VO : Value Object 의 약자로 Read-Only 속성을가진 . 값오브젠트이다 . 단순이 값 타입을 표현하기 위한 클래스이기에 getter 기능만 존재한다.
DTO vs VO
dto 는 가변의 성격을 가진 클래스이며 , 데이터 전송을 위해 존재함 , 따라서 getter와 setter기능을 모두 가지고있다.
vo는 값 자체의 의미를가진 불변클래스를 의미한다. 따라서 getter기능만 존재한다 .
실행
import com.collection.silsub1.view.BookMenu;
public class Run {
public static void main(String[] args) {
// TODO Auto-generated method stub
new BookMenu().mainMenu();
}
} //BookMenu 클래스객체 생성하고 mainMenu 메소드 실행
'JAVA' 카테고리의 다른 글
[JAVA] JDBC #2 (0) | 2024.04.17 |
---|---|
[JAVA] JDBC #1 (0) | 2024.04.16 |
[JAVA]네트워크 (0) | 2024.03.08 |
[JAVA]Thread (0) | 2024.03.05 |
[JAVA] Collection(List , set , Map) (1) | 2024.02.27 |