Menu
Coddy logo textTech

검색 기능

Coddy Java 여정의 객체 지향 프로그래밍 섹션에 포함된 레슨. 87개 중 80번째.

challenge icon

챌린지

쉬움

강력한 검색 기능으로 Library Management System을 개선해 봅시다! 사용자가 원하는 책을 찾을 수 없다면 도서관은 그다지 유용하지 않습니다. 제목과 저자로 검색하는 메서드를 추가하여 도서관을 진정으로 기능하는 시스템으로 만들어 보세요.

기존 코드를 네 개의 파일에서 계속 확장합니다.

  • Book.java: 모든 기존 기능인 isbn, title, author, isAvailable, borrowedBy, getDetails()와 적절한 getter/setter를 포함하는 Book 클래스를 유지합니다. 아직 추가하지 않았다면 titleauthor에 대한 getter 메서드가 있는지 확인하세요.
  • User.java: id, name, borrowedBooks ArrayList, borrowBook(), returnBook(), getBorrowedCount(), toString()을 포함하는 User 클래스를 변경하지 않고 유지합니다.
  • Library.java: 검색 기능을 추가하여 Library 클래스를 확장합니다. 기존의 모든 메서드(addBook, registerUser, findBookByIsbn, findUserById, borrowBook, returnBook)를 유지하고 다음의 새로운 검색 메서드를 추가합니다.

    searchByTitle(String keyword) - 제목에 키워드가 포함된 모든 책을 담은 ArrayList<Book>을 반환합니다(대소문자를 구분하지 않음). 비교를 위해 제목과 키워드 모두에 toLowerCase()를 사용하세요.

    searchByAuthor(String keyword) - 저자 이름에 키워드가 포함된 모든 책을 담은 ArrayList<Book>을 반환합니다(대소문자를 구분하지 않음).

    getAvailableBooks() - 현재 대출 가능한 책만 담은 ArrayList<Book>을 반환합니다.

  • Main.java: 검색 시스템을 시연합니다! 세 권의 책(각 책의 ISBN, 제목, 저자)에 대한 입력을 받은 다음, 사용자 한 명(ID, 이름), 대출 작업 하나, 검색 질의 두 개를 차례로 받습니다.

    Library를 생성하고 세 권의 책을 모두 추가한 다음 사용자를 등록합니다. 대출 작업을 처리합니다(userId:isbn 형식). 그런 다음 두 번 검색합니다. 첫 번째 입력은 제목 키워드이고 두 번째 입력은 저자 키워드입니다.

    결과를 다음 순서로 출력합니다.

    • 대출 처리 후 대출 확인 메시지를 출력합니다.
    • Title search '[keyword]':를 출력한 다음 일치하는 각 책의 세부 정보를 별도의 줄에 출력합니다(getDetails() 사용). 일치하는 책이 없으면 No books found를 출력합니다.
    • Author search '[keyword]':를 출력한 다음 일치하는 각 책의 세부 정보를 출력합니다. 일치하는 책이 없으면 No books found를 출력합니다.
    • Available books:를 출력한 다음 대출 가능한 각 책의 세부 정보를 출력합니다.

입력은 다음 순서로 제공됩니다. book1 ISBN, book1 title, book1 author, book2 ISBN, book2 title, book2 author, book3 ISBN, book3 title, book3 author, 사용자 ID, 사용자 이름, 대출 작업, 제목 검색 키워드, 저자 검색 키워드입니다.

예를 들어 입력이 ISBN-001, Clean Code, Robert Martin, ISBN-002, The Clean Coder, Robert Martin, ISBN-003, Design Patterns, Gang of Four, U001, Alice, U001:ISBN-001, clean, martin으로 주어지면 출력은 다음과 같습니다.

Alice borrowed Clean Code
Title search 'clean':
[ISBN-001] Clean Code by Robert Martin
[ISBN-002] The Clean Coder by Robert Martin
Author search 'martin':
[ISBN-001] Clean Code by Robert Martin
[ISBN-002] The Clean Coder by Robert Martin
Available books:
[ISBN-002] The Clean Coder by Robert Martin
[ISBN-003] Design Patterns by Gang of Four

검색 메서드가 대소문자를 구분하지 않는 일치 방식을 사용한다는 점에 주목하세요. "clean"으로 검색하면 "Clean Code"와 "The Clean Coder"를 모두 찾습니다. 대출 가능한 책 목록에서는 대출된 책이 올바르게 제외됩니다. 이러한 검색 기능을 통해 도서관은 단순한 모음에서 진정으로 사용할 수 있는 시스템으로 탈바꿈합니다!

직접 해보기

import java.util.Scanner;
import java.util.ArrayList;

class Main {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        
        // 도서 1 정보 읽기
        String isbn1 = scanner.nextLine();
        String title1 = scanner.nextLine();
        String author1 = scanner.nextLine();
        
        // 도서 2 정보 읽기
        String isbn2 = scanner.nextLine();
        String title2 = scanner.nextLine();
        String author2 = scanner.nextLine();
        
        // 도서 3 정보 읽기
        String isbn3 = scanner.nextLine();
        String title3 = scanner.nextLine();
        String author3 = scanner.nextLine();
        
        // 사용자 정보 읽기
        String userId = scanner.nextLine();
        String userName = scanner.nextLine();
        
        // 대출 작업 읽기
        String borrowOp = scanner.nextLine();
        
        // 검색 키워드 읽기
        String titleKeyword = scanner.nextLine();
        String authorKeyword = scanner.nextLine();
        
        // Book 객체 생성
        Book book1 = new Book(isbn1, title1, author1);
        Book book2 = new Book(isbn2, title2, author2);
        Book book3 = new Book(isbn3, title3, author3);
        
        // User 객체 생성
        User user = new User(userId, userName);
        
        // Library 생성 및 도서와 사용자 추가
        Library library = new Library();
        library.addBook(book1);
        library.addBook(book2);
        library.addBook(book3);
        library.registerUser(user);
        
        // 대출 작업 처리
        String[] parts = borrowOp.split(":");
        String opUserId = parts[0];
        String opIsbn = parts[1];
        library.borrowBook(opUserId, opIsbn);
        
        // TODO: 제목 검색
        // Print "Title search '[titleKeyword]':"
        // library.searchByTitle(titleKeyword) 사용
        // Print each book's getDetails(), or "No books found" if empty
        
        // TODO: Author search
        // Print "Author search '[authorKeyword]':"
        // library.searchByAuthor(authorKeyword)를 사용하세요
        // Print each book's getDetails(), or "No books found" if empty
        
        // TODO: Available books
        // Print "Available books:"
        // Use library.getAvailableBooks()
        // 각 도서의 getDetails()를 출력하세요
    }
}

객체 지향 프로그래밍의 모든 레슨

직접 연습해 보세요: 온라인 Java 컴파일러