- 자바 프로젝트 리팩토링 : Library Service(4)
회원 다음으로 작업 시작한 것은 도서 기능. 도서는 도서정보(Book)와 소장도서정보(LibBook)로 나눠져 있다.
가장 먼저 작업한 것은 도서를 조회해 오는 findBy 관련 메서드들이였다.
굳이 나누지 않아도 될 메서드들은 제거하였고, 같은 기능을 하는 메서드는 오버로딩(overloding)하였다.
도서에서 사용하던 findBy 메서드는 총 6개였다.
findLibBookIndexBy : 소장도서의 인덱스를 찾는 메서드← 객체로 조회하여 데이터 삭제- findBookByID : 도서ID로 도서정보 조회 ← getBook 메서드
- findBookByIsbn : ISBN으로 도서정보 조회 ← getBook 메서드 (오버로딩)
- findLibBookListByBookID : 도서ID로 소장도서 목록 조회 ← listLibBook 메서드 (오버로딩)
- findLibBookByID : 소장도서ID로 소장도서정보 조회 ← getLibbook 메서드
findBookByLibBookID : 소장도서ID로 도서정보 조회← 삭제
- 기존 코드
/** @findBy_메서드 */
/**
* 소장도서 번호가 일치하는 소장도서의 인덱스를 찾는 메서드.
* @param libBookID : 소장도서 번호(LibBook 클래스의 id)
* @return ret : 소장도서 번호가 일치하는 소장도서의 인덱스 번호
*/
private int findLibBookIndexBy(int libBookID) {
int ret = -1;
for (int i = 0; i < lBooks.size(); i++) {
if (lBooks.get(i).getId() == libBookID) {
ret = i;
break;
}
}
return ret;
}
/**
* ISBN이 일치하는 도서정보를 찾는 메서드. 일치하는 값이 없을 경우, null을 반환한다.
* @param isbn : Book 클래스의 isbn과 비교할 isbn
* @return book : ISBN이 일치하는 도서정보를 Book 타입으로 반환
*/
private Book findBookByIsbn(String isbn) {
Book book = null;
for (Book b : books) {
if (b.getIsbn().equals(isbn)) {
book = b;
}
}
return book;
}
/**
* 도서번호가 일치하는 도서정보를 찾는 메서드. 일치하는 값이 없을 경우, null을 반환한다.
* @param bookID : 도서번호(Book 클래스의 id)
* @return book : 도서번호가 일치하는 도서정보를 Book 타입으로 반환
*/
private Book findBookByID(int bookID) {
Book book = null;
for (Book b : books) {
if (b.getId() == bookID) {
book = b;
}
}
return book;
}
/**
* 도서번호가 일치하는 소장도서를 목록화하는 메서드.
* @param bookID : 도서번호(Book 클래스의 id)
* @return libBooks : 도서번호가 일치하는 소장도서를 LibBook타입의 List형식으로 반환
*/
private List<LibBook> findLibBookListByBookID(int bookID) {
List<LibBook> libBooks = new ArrayList<LibBook>();
for (LibBook lB : lBooks) {
if (lB.getBookID() == bookID) {
libBooks.add(lB);
}
}
return libBooks;
}
/**
* 소장도서 번호가 일치하는 소장도서 정보를 찾는 메서드. 일치하는 값이 없을 경우, null을 반환한다.
* @param libBookID : 소장도서 번호(LibBook 클래스의 id)
* @return libBook : 소장도서 번호가 일치하는 소장도서 정보를 LibBook 타입으로 반환
*/
private LibBook findLibBookByID(int libBookID) {
LibBook libBook = null;
for (LibBook lB : lBooks) {
if (lB.getId() == libBookID) {
libBook = lB;
break;
}
}
return libBook;
}
/**
* 소장도서 번호가 일치하는 도서정보를 찾는 메서드. 일치하는 값이 없을 경우, null을 반환한다.
* @param libBookID : 소장도서 번호(LibBook 클래스의 id)
* @return book : 소장도서 번호가 일치하는 도서정보를 Book 타입으로 반환
*/
private Book findBookByLibBookID(int libBookID) { // LibBookID로 Book 탐색
Book book = null;
for (Book b : books) {
if (b.getId() == findLibBookByID(libBookID).getBookID()) {
book = b;
}
}
return book;
}
- 리팩토링 코드
// 도서정보 목록조회
public List<Book> listBook() {
return books;
}
// 도서정보 조회
public Book getBook(int id) {
for (Book b : books) {
if (b.getId() == id) {
return b;
}
}
return null;
}
// 도서정보 조회(ISBN)
public Book getBook(String isbn) {
for (Book b : books) {
if (b.getIsbn().equals(isbn)) {
return b;
}
}
return null;
}
// 소장도서 목록조회
public List<LibBook> listLibBook() {
return libBooks;
}
// 소장도서 목록조회(도서정보 ID)
public List<LibBook> listLibBook(int id) {
List<LibBook> lBooks = new ArrayList<LibBook>();
for (LibBook lB : libBooks) {
if (lB.getBookID() == id) {
lBooks.add(lB);
}
}
return lBooks;
}
// 소장도서 조회
public LibBook getLibBook(int id) {
for (LibBook lB : libBooks) {
if (lB.getId() == id) {
return lB;
}
}
return null;
}