Menu
Coddy logo textTech

복습 - 동물원 사육사

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

challenge icon

챌린지

중급

다섯 개의 파일에 걸쳐 S4 클래스 동물원을 만드세요.

  • Animal.R: 슬롯 name과 kg를 가진 가상 클래스 Animal, 제네릭 food_kg(a), 그리고 Animal을 위한 show() 메서드를 정의하세요. 이 메서드는 Leo the lion eats 9.5 kg를 출력합니다(클래스 이름은 소문자로, 음식량은 소수점 한 자리로 표시) 또한 새 줄을 출력합니다.
  • Mammal.R: Animal을 포함하는 가상 클래스 Mammal입니다.
  • Lion.R 및 Elephant.R: 각각 체중의 5%와 4%를 먹는 포유류입니다.
  • Parrot.R: 포유류가 아닌 동물로, 추가 슬롯 word를 가지며 0.1 kg을 먹습니다. 이 클래스의 show()는 동물에 대한 줄을 출력한 다음 callNextMethod()를 사용하여 Polly says hello를 출력합니다.

제공된 코드는 lion Leo 190, elephant Ella 4000 또는 parrot Polly 1 hello 형식의 줄을 읽고, 모든 동물, 총 음식량, 포유류의 수, 그리고 Animal이 가상인지 여부를 출력합니다.

코드는 Animal.R, Mammal.R, Lion.R, Elephant.R 및 Parrot.R에 작성하세요. main.R에는 제공된 입력/출력 코드가 들어 있으며 편집할 수 없습니다.

직접 해보기

source("Animal.R")
source("Mammal.R")
source("Lion.R")
source("Elephant.R")
source("Parrot.R")

# 제공된 입력/출력 코드: 있는 그대로 유지하세요
input <- suppressWarnings(readLines(file("stdin")))
zoo <- list()
for (line in input) {
  p <- strsplit(line, " ")[[1]]
  kg <- as.numeric(p[3])
  a <- switch(p[1],
    lion = new("Lion", name = p[2], kg = kg),
    elephant = new("Elephant", name = p[2], kg = kg),
    parrot = new("Parrot", name = p[2], kg = kg, word = p[4]))
  zoo[[length(zoo) + 1]] <- a
  print(a)
}
cat(sprintf("food per day: %.1f kg", sum(vapply(zoo, food_kg, numeric(1)))), "\n", sep = "")
cat("mammals: ", sum(vapply(zoo, is, logical(1), "Mammal")), "\n", sep = "")
cat("Animal is virtual: ", isVirtualClass("Animal"), "\n", sep = "")

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

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