Menu
Coddy logo textTech

도서 및 사용자 클래스

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

challenge icon

챌린지

쉬움

Book 클래스와 User 클래스를 생성하여 도서 관리 시스템의 기초를 구축해 보겠습니다. 이 핵심 도메인 객체들은 도서관 운영을 관리하기 위해 함께 작동할 것입니다.

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

  • Book.php — 도서관 도서를 추적하는 Book 클래스를 생성합니다. 도서는 생성자 프로모션(constructor promotion)을 통해 설정되는 세 개의 읽기 전용(readonly) 속성인 isbn, title, author를 가져야 합니다. true로 시작하는 private $isAvailable 속성을 포함하세요. 다음 세 가지 메서드를 추가합니다:
    • isAvailable(): bool — 대출 가능 상태를 반환합니다.
    • markAsBorrowed(): void — 대출 가능 상태를 false로 설정합니다.
    • markAsReturned(): void — 대출 가능 상태를 true로 설정합니다.
  • User.php — Book 파일을 포함(include)하고 도서관 회원을 나타내는 User 클래스를 생성합니다. 사용자는 생성자 프로모션을 통해 id (int)와 name (string)이라는 두 개의 읽기 전용 속성을 가져야 합니다. 처음에 비어 있는 private 배열 $borrowedBooks3으로 설정된 상수 MAX_BOOKS를 포함하세요. 다음 메서드들을 추가합니다:
    • getBorrowedBooks(): array — 대출된 도서 배열을 반환합니다.
    • canBorrow(): bool — 사용자가 대출한 도서가 MAX_BOOKS보다 적으면 true를 반환합니다.
    • addBook(Book $book): void — 대출된 도서 배열에 도서를 추가합니다.
    • removeBook(string $isbn): voidarray_filter를 사용하여 ISBN으로 도서를 제거합니다.
  • main.php — User 파일을 포함하고 클래스들을 실제로 동작시킵니다. 사용자 ID, 사용자 이름, 도서 ISBN, 도서 제목(작가는 "Unknown"으로 설정)의 네 가지 입력을 받게 됩니다.

    제공된 값으로 UserBook 객체를 생성하세요. 처음에 사용자가 대출 가능한지 여부를 출력한 다음, 사용자가 도서를 대출하도록 하세요(도서를 대출된 상태로 표시하고 사용자의 목록에 추가). 마지막으로 도서의 대출 가능 여부와 대출된 도서의 수를 출력하세요.

    출력 형식:

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

캡슐화가 어떻게 내부 상태를 보호하는지 주목하세요. 도서의 대출 가능 여부는 전용 메서드를 통해서만 변경되며, 사용자의 대출 도서는 제어된 접근을 통해 관리됩니다. 이 기초는 다음에 구축할 대출 시스템의 기반이 될 것입니다.

직접 해보기

<?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: 사용자가 처음에 대출할 수 있는지 여부 출력
// 형식: "Can borrow: yes" 또는 "Can borrow: no"

// TODO: 사용자가 도서를 대출하도록 함:
// - 도서를 대출 중으로 표시
// - 사용자의 대출 도서 목록에 도서 추가

// TODO: 도서의 대여 가능 여부 출력
// 형식: "Book available: yes" 또는 "Book available: no"

// TODO: 대출된 도서 수 출력
// 형식: "Books borrowed: [count]"

?>

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