Menu
Coddy logo textTech

테스트 및 통합

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

challenge icon

챌린지

쉬움

Library Management System을 구축한 것을 축하합니다! 이제 모든 것을 하나로 모아 모든 구성 요소가 통합 시스템으로 올바르게 작동하는지 확인할 시간입니다. 이 프로젝트 전체에서 구축한 모든 기능을 실행하는 종합적인 테스트 시나리오를 만들게 됩니다.

완성된 시스템의 7개 파일을 모두 사용하게 됩니다.

  • Book.java: isbn, title, author, isAvailable, borrowedBy 및 getDetails()를 포함한 모든 관련 메서드를 가진 Book 클래스입니다.
  • User.java: id, name, borrowedBooks 목록과 책을 대여하고 반납하는 메서드를 가진 User 클래스입니다.
  • LibraryException.java: 기본 사용자 정의 예외 클래스입니다.
  • BookNotAvailableException.java: 대여할 수 없는 책을 위한 예외입니다.
  • LibraryAdmin.java: 관리자 interface와 AdminService 구현입니다.
  • Library.java: 책 추가 및 제거, 사용자 등록, 대여 및 반납, 검색, 예외 handling을 포함한 모든 메서드를 갖춘 완전한 Library 클래스입니다.
  • Main.java: 전체 시스템이 함께 작동하는 모습을 보여 주는 통합 테스트입니다.

Main 클래스에서는 Library Management System의 모든 주요 기능을 테스트하는 일련의 commands를 처리합니다. commands는 다음 형식의 하나의 comma로 구분된 문자열로 제공됩니다.

  • ADD_BOOK:isbn:title:author - AdminService를 통해 책 추가
  • REGISTER_USER:id:name - AdminService를 통해 사용자 등록
  • BORROW:userId:isbn - 책 대여 (예외 handling 포함)
  • RETURN:userId:isbn - 책 반납
  • SEARCH_TITLE:keyword - title로 책 검색
  • SEARCH_AUTHOR:keyword - author로 책 검색
  • REMOVE_BOOK:isbn - AdminService를 통해 책 제거

각 command를 처리하고 적절한 출력을 출력합니다.

  • ADD_BOOK: Added: [title]
  • REGISTER_USER: Registered: [name]
  • BORROW: 성공 메시지 또는 Error: [exception message] 출력
  • RETURN: [userName] returned [bookTitle]
  • SEARCH_TITLE: Search '[keyword]':를 출력한 뒤 일치하는 각 책의 세부 정보 출력, 또는 No results 출력
  • SEARCH_AUTHOR: title 검색과 동일한 형식
  • REMOVE_BOOK: Removed: [isbn] 또는 Cannot remove: [isbn]

모든 command가 끝나면 최종 요약을 출력합니다.

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

입력은 하나만 받습니다. comma로 구분된 command 문자열입니다.

예를 들어 입력이 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)

이 최종 challenge는 모든 구성 요소, 클래스, interface, 예외 및 Library 로직이 원활하게 함께 작동하는지 검증합니다. 완전하고 견고한 Library Management System을 구축했습니다!

직접 해보기

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: 최종 상태 출력
        // --- Final Status ---
        // 도서: [count]
        // 사용자: [count]
        // 각 사용자: [name]: [borrowedCount]권의 책
        System.out.println("Operations completed");
    }
}

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

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