Menu
Coddy logo textTech

관리자 인터페이스

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

challenge icon

챌린지

쉬움

관리 기능을 추가하여 도서 관리 시스템을 확장해 보겠습니다. User를 상속받지만 도서관의 인벤토리를 관리(새 도서 추가 및 기존 도서 삭제)할 수 있는 특별한 권한을 가진 Admin 클래스를 만들 것입니다.

코드는 다음 다섯 개의 파일로 구성됩니다:

  • Book.php — 읽기 전용 속성(isbn, title, author), true로 시작하는 private $isAvailable 속성, 그리고 isAvailable(), markAsBorrowed(), markAsReturned() 메서드를 가진 Book 클래스입니다.
  • User.php — Book 파일을 포함합니다. 읽기 전용 속성(id, name), private $borrowedBooks 배열, 값이 3MAX_BOOKS 상수, 그리고 getBorrowedBooks(), canBorrow(), addBook(Book $book), removeBook(string $isbn) 메서드를 가진 User 클래스입니다.
  • Library.php — User 파일을 포함합니다. addBook(), findBook(), borrowBook(), returnBook() 및 검색 메서드를 포함한 기존 기능을 가진 Library 클래스입니다. 다음의 새 메서드를 추가하세요:
    • removeBook(string $isbn): voidunset()을 사용하여 컬렉션에서 도서를 제거합니다.
  • Admin.php — Library 파일을 포함합니다. User를 확장하는 Admin 클래스를 만듭니다. 관리자는 모든 사용자 기능을 상속받지만 두 가지 관리 메서드를 추가로 가집니다:
    • addBookToLibrary(Library $library, Book $book): string — 도서관에 도서를 추가하고 "Added: [title]"을 반환합니다.
    • removeBookFromLibrary(Library $library, string $isbn): string — 다음 확인 사항과 함께 도서 제거를 시도합니다:
      • 도서가 존재하지 않으면, "Book not found"를 반환합니다.
      • 도서가 현재 대출 중이면, "Cannot remove: book is currently borrowed"를 반환합니다.
      • 그렇지 않으면, 도서를 제거하고 "Removed: [title]"을 반환합니다.
  • main.php — Admin 파일을 포함합니다. ISBN과 도서 제목이라는 두 개의 입력을 받습니다.

    Library를 생성하고 ID가 1이며 이름이 "AdminUser"Admin을 생성합니다. 또한 ID가 2이며 이름이 "RegularUser"인 일반 User를 생성합니다.

    제공된 ISBN, 제목, 그리고 저자 "Test Author"Book을 생성합니다. 다음 작업을 수행하고 각 결과를 새 줄에 출력하세요:

    1. 관리자가 도서관에 도서를 추가하도록 합니다.
    2. 일반 사용자가 도서를 대출하도록 합니다.
    3. 관리자가 도서 제거를 시도하도록 합니다 (대출 중이므로 실패해야 합니다).
    4. 일반 사용자가 도서를 반납하도록 합니다.
    5. 관리자가 도서를 제거하도록 합니다 (이제 성공해야 합니다).
    6. 관리자가 동일한 도서를 다시 제거하려고 시도합니다 (찾을 수 없으므로 실패해야 합니다).

이 챌린지는 상속이 어떻게 자연스러운 계층 구조를 만드는지 보여줍니다. 관리자는 추가 권한을 가진 사용자입니다. removeBookFromLibrary의 안전 확인은 아직 순환 중인 도서의 삭제를 방지하여 데이터 무결성을 보장합니다.

직접 해보기

<?php
require_once 'Admin.php';

// 입력 읽기
$isbn = trim(fgets(STDIN));
$title = trim(fgets(STDIN));

// TODO: Library 생성

// TODO: ID가 1이고 이름이 "AdminUser"인 Admin 생성

// TODO: ID가 2이고 이름이 "RegularUser"인 일반 User 생성

// TODO: 제공된 ISBN, 제목, 그리고 저자 "Test Author"로 Book 생성

// TODO: 다음 작업들을 수행하고 각 결과를 새 줄에 출력:
// 1. 관리자가 도서관에 책을 추가하도록 함
// 2. 일반 사용자가 책을 대출하도록 함
// 3. 관리자가 책을 삭제하려고 시도함 (대출 중이므로 실패해야 함)
// 4. 일반 사용자가 책을 반납하도록 함
// 5. 관리자가 책을 삭제함 (이제 성공해야 함)
// 6. 관리자가 동일한 책을 다시 삭제하려고 시도함 (찾을 수 없으므로 실패해야 함)

?>

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