Menu
Coddy logo textTech

도서와 회원

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

이 프로젝트에서는 Reference Classes를 사용해 도서관 시스템의 핵심을 구축합니다. 프로그램이 실행되는 동안 책과 회원의 상태가 변하기 때문입니다. 책은 대출되고 반납되며, 회원의 대출 목록은 늘어나고 줄어듭니다. Library 객체는 한 줄에 하나씩 명령을 받아 각각에 응답합니다. 다섯 단계에 걸쳐 책과 회원을 추가하고, 책을 대출하고 반납하며, 카탈로그를 검색하고 보고서를 출력하는 방법을 익힙니다.

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

프로그램에는 파일마다 하나의 클래스가 있습니다. Book.R과 Member.R에는 두 개의 작은 클래스가 들어 있고, Library.R에는 이를 이름이 지정된 두 개의 리스트에 저장하고 명령에 응답하는 클래스가 들어 있습니다. RC 객체는 참조이므로 리스트에서 조회한 책을 변경하면 라이브러리에 있는 책도 변경됩니다:

Book <- setRefClass("Book", fields = list(id = "numeric", title = "character", borrower = "character"))
books <- list()
books[["7"]] <- Book$new(id = 7, title = "Dune")
b <- books[["7"]]
b$borrower <- "ada"
cat(books[["7"]]$borrower, is.null(books[["9"]]))

출력:

ada TRUE

handle(line)은 명령을 분할하고 첫 번째 단어에 switch()를 사용하여 해당 명령의 메서드를 호출합니다. 모든 메서드는 응답을 문자형 벡터로 반환하므로 REPORT와 같은 명령은 여러 줄로 응답할 수 있습니다. 제목에는 공백이 포함될 수 있으므로 id 뒤의 모든 내용이 제목입니다:

p <- strsplit("ADD_BOOK 7 The Hobbit", " ")[[1]]
id <- as.numeric(p[2])
title <- paste(p[-(1:2)], collapse = " ")
cat(id, title, sep = ": ")

출력:

7: The Hobbit
challenge icon

챌린지

쉬움

Book 클래스(id, title, borrower 필드)와 Member 클래스(name, borrowed 필드)가 주어집니다. Library.R에서 Library의 두 메서드를 완성하세요:

  • ADD_BOOK <id> <title>을 처리하는 add_book(id, title): 새 책을 as.character(id) 아래에 저장하고 added book 1: Dune을 응답합니다. id가 이미 사용 중이면 book 1 exists를 응답합니다.
  • JOIN <name>을 처리하는 join(name): 새 회원을 이름 아래에 저장하고 welcome ada를 응답합니다. 이름이 이미 존재하면 ada is already a member를 응답합니다.

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

코드는 Book.R, Member.R, Library.R에 작성합니다. main.R에는 제공된 입력/출력 코드가 들어 있으며 수정할 수 없습니다.

직접 해보기

source("Book.R")
source("Member.R")
source("Library.R")

# 제공된 입출력 코드: 있는 그대로 유지하세요
input <- suppressWarnings(readLines(file("stdin")))
lib <- Library$new()
for (line in input) {
  for (reply in lib$handle(line)) cat(reply, "\n", sep = "")
}
quiz icon실력 점검

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

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

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