Menu
CoddyTech

도서와 회원

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

이 프로젝트에서는 도서관 시스템의 핵심을 만듭니다. Library 객체는 한 줄에 하나씩 명령을 받고 각 명령에 응답합니다. 다섯 단계를 거치며 책과 회원을 추가하고, 책을 대출하고 반납하고, 도서 목록을 검색하고 보고서를 출력하는 방법을 익힙니다.

ADD_BOOK 1 Dune
JOIN ada
BORROW ada 1
RETURN ada 1
SEARCH dune
REPORT

데이터 모델은 이 절에서 배운 내용을 사용합니다. Book은 id와 title을 읽기 전용으로 제공하고, 접근자를 통해 borrower를 제공하며, 조건자 available?도 제공합니다. Member는 대출한 항목의 ID를 배열에 보관합니다. 각 클래스는 book.rb, member.rb, library.rb라는 각각의 파일에 있으며, 도서관은 두 종류의 객체를 모두 해시로 보관하고, 그 해시에는 도서관 자체의 메서드만 접근합니다:

class Book
  attr_reader :id, :title
  attr_accessor :borrower

  def initialize(id, title)
    @id = id
    @title = title
    @borrower = nil
  end

  def available?
    borrower.nil?
  end
end

books = { 1 => Book.new(1, "Dune") }
books[1].borrower = "ada"
puts books[1].available?

출력:

false

handle(line)은 명령을 분리하고 첫 번째 단어에 따라 case로 분기합니다. 각 분기는 응답을 배열로 반환하므로 REPORT와 같은 명령은 여러 줄로 응답할 수 있고, return은 오류 응답과 함께 일찍 종료합니다. 책 제목에는 공백이 포함될 수 있으므로, id 뒤에 오는 모든 내용이 제목입니다:

parts = "ADD_BOOK 7 The Hobbit".split
id = parts[1].to_i
title = parts[2..].join(" ")
puts "#{id}: #{title}"

출력:

7: The Hobbit
challenge icon

챌린지

쉬움

처음 두 명령에 대해 Library#handle을 완성하세요:

  • ADD_BOOK id title: 새 책을 대출 가능한 상태로 저장하고 added book 1: Dune로 응답하세요. id가 이미 사용 중이면 book 1 exists로 응답하세요.
  • JOIN name: 회원을 추가하고 welcome ada로 응답하세요. name이 이미 있으면 ada is already a member로 응답하세요.

제공된 코드는 모든 입력 줄을 library.handle(line)에 전달하고, 반환된 각 응답을 별도의 줄에 출력합니다. 회원 이름은 소문자로 된 한 단어이고, 책 id는 정수이며, 입력에는 지금까지 설명한 명령만 포함됩니다. 그 밖의 명령에는 unknown command로 응답하세요.

코드는 book.rb, member.rb, library.rb에 작성하세요. main.rb에는 제공된 입력/출력 코드가 있으며 수정할 수 없습니다.

직접 해보기

require_relative 'book'
require_relative 'member'
require_relative 'library'

# 제공된 입력/출력 코드: 그대로 유지하세요
input = []
while (line = gets)
  input << line.chomp
end
library = Library.new
input.each do |line|
  library.handle(line).each { |reply| puts reply }
end
quiz icon실력 점검

이 레슨에는 짧은 퀴즈가 포함되어 있습니다. 레슨을 시작해 문제를 풀고 진행 상황을 기록하세요.

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

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