Menu
Coddy logo textTech

클래스를 활용한 리스트

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

S3는 R에서 가장 오래되고 가장 널리 사용되는 객체 시스템입니다. S3 객체는 class 속성이 있는 일반 목록으로, 해당 객체가 어떤 종류인지 나타내는 레이블입니다. class(x) <- "dog"는 레이블을 설정합니다:

rex <- list(name = "Rex", age = 3)
class(rex) <- "dog"
print(class(rex))
cat(rex$name, "is", rex$age)

출력:

[1] "dog"
Rex is 3

structure()는 한 번의 호출로 값을 만들고 해당 속성을 설정하며, S3 객체를 생성하는 일반적인 방법입니다. 필드는 모든 리스트에서와 마찬가지로 $를 사용해 읽습니다:

rex <- structure(list(name = "Rex", age = 3), class = "dog")
print(class(rex))
print(is.list(rex))
print(rex$age)

출력:

[1] "dog"
[1] TRUE
[1] 3

클래스는 단지 레이블일 뿐입니다. R은 객체에 어떤 필드가 있는지 확인하지 않으므로, 어떤 리스트든 dog라고 부를 수 있습니다. unclass()는 레이블을 제거하고 일반 리스트를 돌려줍니다:

p <- structure(list(x = 1, y = 2), class = "point")
print(unclass(p))

출력:

$x
[1] 1

$y
[1] 2

S3 객체는 값입니다. 객체를 변경하는 함수는 자체 복사본을 변경하므로 새 버전을 반환하고 호출자가 이를 할당합니다. 원본은 그대로 유지됩니다:

birthday <- function(d) {
  d$age <- d$age + 1
  d
}
rex <- structure(list(name = "Rex", age = 3), class = "dog")
older <- birthday(rex)
cat(rex$age, older$age)

출력:

3 4
challenge icon

챌린지

쉬움

Pet.R에서 make_pet(name, species, age)를 완성하세요. 이 함수는 name, species, age 필드를 순서대로 포함하고 클래스가 pet인 리스트를 반환합니다. 그런 다음 describe_pet(p)를 완성하세요. 이 함수는 한 문장을 반환해야 합니다. 이름이 Rex이고 종이 dog이며 나이가 3인 반려동물은 Rex is a 3 year old dog를 반환합니다.

제공된 코드는 이름, 종, 나이를 읽고 반려동물을 생성한 다음 해당 반려동물의 클래스, 필드 이름 및 문장을 출력합니다.

코드는 Pet.R에 작성합니다. main.R에는 제공된 입력/출력 코드가 있으며 편집할 수 없습니다.

직접 해보기

source("Pet.R")

# 제공된 입력/출력 코드: 그대로 유지하세요
input <- suppressWarnings(readLines(file("stdin")))
p <- make_pet(input[1], input[2], as.numeric(input[3]))
cat("class: ", class(p), "\n", sep = "")
cat("fields: ", paste(names(p), collapse = ", "), "\n", sep = "")
cat(describe_pet(p), "\n", sep = "")
quiz icon실력 점검

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

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

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