테스트 및 통합
Coddy Java 여정의 객체 지향 프로그래밍 섹션에 포함된 레슨. 87개 중 83번째.
챌린지
쉬움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");
}
}
객체 지향 프로그래밍의 모든 레슨
4상속
상속의 기초 (extends)super 키워드메서드 오버라이딩 (@Override)생성자 체이닝Object 클래스단일 및 다중 레벨 상속다중 클래스 상속이 불가능한 이유요약 - 직원 계층 구조직접 연습해 보세요: 온라인 Java 컴파일러