Menu
Coddy logo textTech

테스트 및 통합

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

challenge icon

챌린지

쉬움

도서 관리 시스템 구축을 축하합니다! 이제 모든 구성 요소를 하나로 모아 통합 시스템으로서 올바르게 작동하는지 확인할 시간입니다. 이 프로젝트 전반에 걸쳐 구축한 모든 기능을 실행하는 포괄적인 테스트 시나리오를 작성하게 됩니다.

완성된 시스템의 7개 파일 모두를 사용하여 작업하게 됩니다:

  • Book.java: isbn, title, author, isAvailable, borrowedBy 필드와 getDetails()를 포함한 모든 관련 메서드가 있는 Book 클래스입니다.
  • User.java: id, name, borrowedBooks 리스트, 그리고 도서 대출/반납 메서드가 있는 User 클래스입니다.
  • LibraryException.java: 기본 사용자 정의 예외 클래스입니다.
  • BookNotAvailableException.java: 대출 불가능한 도서에 대한 예외 클래스입니다.
  • LibraryAdmin.java: 관리자 인터페이스 및 AdminService 구현체입니다.
  • Library.java: 도서 추가/삭제, 사용자 등록, 대출/반납, 검색 및 예외 처리를 포함한 모든 메서드가 있는 완성된 Library 클래스입니다.
  • Main.java: 전체 시스템이 함께 작동하는 것을 보여주는 통합 테스트입니다.

Main 클래스에서 도서 시스템의 모든 주요 기능을 테스트하는 일련의 명령을 처리합니다. 명령은 다음과 같은 형식의 쉼표로 구분된 단일 문자열로 제공됩니다:

  • ADD_BOOK:isbn:title:author - AdminService를 통해 도서 추가
  • REGISTER_USER:id:name - AdminService를 통해 사용자 등록
  • BORROW:userId:isbn - 도서 대출 (예외 처리 포함)
  • RETURN:userId:isbn - 도서 반납
  • SEARCH_TITLE:keyword - 제목으로 도서 검색
  • SEARCH_AUTHOR:keyword - 저자로 도서 검색
  • REMOVE_BOOK:isbn - AdminService를 통해 도서 삭제

각 명령을 처리하고 적절한 출력을 인쇄하세요:

  • ADD_BOOK: Added: [title]
  • REGISTER_USER: Registered: [name]
  • BORROW: 성공 메시지 또는 Error: [exception message] 출력
  • RETURN: [userName] returned [bookTitle]
  • SEARCH_TITLE: Search '[keyword]':를 출력한 후 일치하는 각 도서의 상세 정보를 출력하거나, 결과가 없으면 No results 출력
  • SEARCH_AUTHOR: 제목 검색과 동일한 형식
  • REMOVE_BOOK: Removed: [isbn] 또는 Cannot remove: [isbn]

모든 명령이 끝난 후, 최종 요약을 출력하세요:

  • --- Final Status ---
  • Books: [count]
  • Users: [count]
  • 각 사용자에 대해 [name]: [borrowedCount] book(s) 출력

입력으로 쉼표로 구분된 명령 문자열 하나를 받게 됩니다.

예를 들어, 입력이 ADD_BOOK:ISBN-001:Clean Code:Robert Martin,ADD_BOOK:ISBN-002:Effective Java:Joshua Bloch,REGISTER_USER:U001:Alice,REGISTER_USER:U002:Bob,BORROW:U001:ISBN-001,BORROW:U002:ISBN-001,SEARCH_TITLE:java,RETURN:U001:ISBN-001,REMOVE_BOOK:ISBN-001인 경우, 출력은 다음과 같습니다:

Added: Clean Code
Added: Effective Java
Registered: Alice
Registered: Bob
Alice borrowed Clean Code
Error: Book not available: ISBN-001
Search 'java':
[ISBN-002] Effective Java by Joshua Bloch
Alice returned Clean Code
Removed: ISBN-001
--- Final Status ---
Books: 1
Users: 2
Alice: 0 book(s)
Bob: 0 book(s)

이 마지막 챌린지는 클래스, 인터페이스, 예외 및 라이브러리 로직과 같은 모든 구성 요소가 원활하게 함께 작동하는지 검증합니다. 여러분은 완전하고 견고한 도서 관리 시스템을 구축했습니다!

직접 해보기

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

class Main {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        
        // 쉼표로 구분된 명령들을 읽습니다
        String input = scanner.nextLine();
        String[] commands = input.split(",");
        
        // Library와 AdminService를 생성합니다
        Library library = new Library();
        AdminService adminService = new AdminService(library);
        
        // 각 명령을 처리합니다
        for (String command : commands) {
            String[] parts = command.split(":");
            String operation = parts[0];
            
            if (operation.equals("ADD_BOOK")) {
                String isbn = parts[1];
                String title = parts[2];
                String author = parts[3];
                if (adminService.addBook(isbn, title, author)) {
                    System.out.println("Added: " + title);
                }
            } else if (operation.equals("REMOVE_BOOK")) {
                String isbn = parts[1];
                if (adminService.removeBook(isbn)) {
                    System.out.println("Removed: " + isbn);
                } else {
                    System.out.println("Cannot remove: " + isbn);
                }
            } else if (operation.equals("REGISTER_USER")) {
                String id = parts[1];
                String name = parts[2];
                if (adminService.registerUser(id, name)) {
                    System.out.println("Registered: " + name);
                }
            } else if (operation.equals("BORROW")) {
                String userId = parts[1];
                String isbn = parts[2];
                try {
                    String result = library.borrowBook(userId, isbn);
                    System.out.println(result);
                } catch (LibraryException e) {
                    System.out.println("Error: " + e.getMessage());
                }
            }
            // TODO: RETURN 명령에 대한 처리를 추가합니다
            // TODO: SEARCH_TITLE 명령에 대한 처리를 추가합니다
            // TODO: SEARCH_AUTHOR 명령에 대한 처리를 추가합니다
        }
        
        // TODO: 최종 상태를 출력합니다
        // --- 최종 상태 ---
        // Books: [count]
        // Users: [count]
        // 각 사용자별: [name]: [borrowedCount] book(s)
        System.out.println("Operations completed");
    }
}

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