import java.util.ArrayList;
import java.util.List;
// 책 정보를 저장하는 클래스
public class Book {
private String title; // 책 제목
private String author; // 저자
public Book(String title, String author) {
this.title = title;
this.author = author;
}
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() {
return "Book{" +
"title='" + title + '\'' +
", author='" + author + '\'' +
'}';
}
}
// 선반 인터페이스
interface Shelf {
void addBook(Book book); // 책 추가
Book lendBook(); // 책 대여
}
// A선반 클래스 (책이 추가된 순서대로 대여)
class ShelfA implements Shelf {
private List<Book> books = new ArrayList<>();
@Override
public void addBook(Book book) {
books.add(book);
}
@Override
public Book lendBook() {
if (books.isEmpty()) {
return null; // 빈 선반인 경우 null 반환
}
return books.remove(0); // 선반에서 첫 번째 책 대여
}
@Override
public String toString() {
return "ShelfA{" +
"books=" + books +
'}';
}
}
// B선반 클래스 (책이 반납된 역순으로 대여)
class ShelfB implements Shelf {
private List<Book> books = new ArrayList<>();
@Override
public void addBook(Book book) {
books.add(book);
}
@Override
public Book lendBook() {
if (books.isEmpty()) {
return null; // 빈 선반인 경우 null 반환
}
return books.remove(books.size() - 1); // 선반에서 마지막 책 대여
}
public void returnBook(Book book) {
books.add(book); // 책 반납
}
@Override
public String toString() {
return "ShelfB{" +
"books=" + books +
'}';
}
}
// 도서관 클래스 (책 대여 및 반납 관리)
class Library {
private Shelf shelfA;
private Shelf shelfB;
public Library() {
shelfA = new ShelfA();
shelfB = new ShelfB();
}
// A 선반 또는 B 선반에서 책 대여
public Book lendBook(boolean fromShelfA) {
if (fromShelfA) {
return shelfA.lendBook();
} else {
return shelfB.lendBook();
}
}
// A 선반에 책 추가
public void addBookToShelfA(Book book) {
shelfA.addBook(book);
}
// B 선반에 책 추가
public void addBookToShelfB(Book book) {
shelfB.addBook(book);
}
// 책을 B선반에 반납
public void returnBookToShelfB(Book book) {
if (shelfB instanceof ShelfB) {
((ShelfB) shelfB).returnBook(book);
}
}
@Override
public String toString() {
return "Library{" +
"shelfA=" + shelfA +
", shelfB=" + shelfB +
'}';
}
}
class Main {
public static void main(String[] args) {
// 도서관 생성
Library library = new Library();
// 선반에 책 추가
library.addBookToShelfA(new Book("오만과 편견", "제인 오스틴"));
library.addBookToShelfA(new Book("죄와 벌", "표도르 도스토옙스키"));
library.addBookToShelfA(new Book("햄릿", "셰익스피어"));
library.addBookToShelfA(new Book("작은아씨들", "루이자 메이 올컷"));
library.addBookToShelfA(new Book("누가 내 머리에 똥 쌌어", "베르너 홀츠바르트"));
System.out.println(library.toString());
// 책 대여
System.out.println("shelf A에서 책을 대여: " + library.lendBook(true).getTitle());
System.out.println("shelf A에서 책을 대여 : " + library.lendBook(true).getTitle());
// 책 반납 후 B 선반에서 책 대여
Book returnedBook = new Book("구름빵", "백희나");
Book returnedBook1 = new Book("전쟁과 평화", "톨스토이");
library.returnBookToShelfB(returnedBook);
library.returnBookToShelfB(returnedBook1);
System.out.println(library.toString());
System.out.println("반납한 책을 shelf B에서 대여 " + library.lendBook(false).getTitle());
}
}