Menu
Coddy logo textTech

도서 및 사용자 클래스

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

challenge icon

챌린지

쉬움

BookUser 클래스를 만들어 Library Management System의 기반을 구축해 보겠습니다. 이러한 핵심 도메인 객체는 함께 작동하여 라이브러리 작업을 관리합니다.

코드를 세 개의 파일로 구성합니다:

  • Book.php: 라이브러리 도서를 추적하는 Book 클래스를 만듭니다. 도서에는 생성자 프로모션을 통해 설정되는 세 개의 readonly 프로퍼티인 isbn, title, author가 있어야 합니다. true로 시작하는 private $isAvailable 프로퍼티를 포함합니다. 다음 세 가지 메서드를 추가합니다:
    • isAvailable(): bool: availability 상태를 반환합니다
    • markAsBorrowed(): void: availability를 false로 설정합니다
    • markAsReturned(): void: availability를 true로 설정합니다
  • User.php: Book 파일을 포함하고 라이브러리 회원을 나타내는 User 클래스를 만듭니다. 사용자에게는 생성자 프로모션을 통한 두 개의 readonly 프로퍼티인 id (int)와 name (string)이 있어야 합니다. private array $borrowedBooks (initially empty)와 3으로 설정된 constant MAX_BOOKS를 포함합니다. 다음 메서드를 추가합니다:
    • getBorrowedBooks(): array: borrowed books array를 반환합니다
    • canBorrow(): bool: 사용자가 MAX_BOOKS보다 fewer한 도서를 borrowed한 경우 true를 반환합니다
    • addBook(Book $book): void: 도서를 borrowed array에 추가합니다
    • removeBook(string $isbn): void: array_filter를 사용하여 ISBN으로 도서를 제거합니다
  • main.php: User 파일을 포함하고 클래스를 실제로 사용합니다. 네 가지 inputs를 받습니다: 사용자 ID, 사용자 이름, 도서 ISBN, 도서 제목입니다 (author는 "Unknown"이 됩니다).

    제공된 값으로 UserBook을 Create합니다. 먼저 사용자가 initially 도서를 borrow할 수 있는지 출력한 다음, 사용자가 도서를 borrow하도록 합니다 (도서를 borrowed로 Mark하고 사용자에게 추가). 마지막으로 도서의 availability와 borrowed books의 count를 출력합니다.

    출력 Format:

    Can borrow: [yes/no]
    Book available: [yes/no]
    Books borrowed: [count]

캡슐화가 내부 상태를 어떻게 보호하는지 확인하세요. 도서의 availability는 전용 메서드를 통해서만 변경되고, 사용자의 borrowed books는 제어된 access를 통해 관리됩니다. 이 기반은 다음에 구축할 borrow 시스템을 지원합니다.

직접 해보기

<?php

require_once 'User.php';

// 입력 읽기
$userId = intval(trim(fgets(STDIN)));
$userName = trim(fgets(STDIN));
$bookIsbn = trim(fgets(STDIN));
$bookTitle = trim(fgets(STDIN));
$bookAuthor = "Unknown";

// TODO: 제공된 id와 name으로 User 객체 생성

// TODO: 제공된 isbn, title, author로 Book 객체 생성

// TODO: 사용자가 처음에 대출할 수 있는지 출력
// Format: "Can borrow: yes" or "Can borrow: no"

// TODO: 사용자가 책을 대출하게 하기:
// - 책을 대출됨으로 표시
// - 사용자의 대출 도서에 책 추가

// TODO: 책의 이용 가능 여부 출력
// Format: "Book available: yes" or "Book available: no"

// TODO: 대출한 책의 수 출력
// Format: "Books borrowed: [count]"

?>

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

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