파일 다루기
Coddy R 여정의 객체 지향 프로그래밍 섹션에 포함된 레슨. 57개 중 1번째.
실제 프로그램은 여러 파일로 나뉩니다. R에서는 source("Greeting.R")가 다른 파일을 위에서 아래로 실행하며, 해당 파일에서 정의한 모든 함수는 이후에 사용할 수 있습니다:
# Greeting.R
greeting <- function(name) {
paste0("Hello, ", name, "!")
}
# main.R
source("Greeting.R")
cat(greeting("Ada"), "\n")main.R을 실행하면 Hello, Ada!가 출력됩니다. source() 줄이 main.R에서 호출하기 전에 greeting()을 불러옵니다.
프로그램은 실행하는 파일에서 시작하며, 여기서는 main.R이고 R은 파일을 한 줄씩 읽습니다. 순서가 중요합니다. 함수를 정의한 파일이 소스되기 전에는 함수가 존재하지 않으므로 source() 줄은 맨 위에 배치합니다:
# main.R
cat(greeting("Ada"), "\n") # 오류: 함수 "greeting"을 찾을 수 없음
source("Greeting.R")
cat(greeting("Ada"), "\n") # 작동함: greeting()이 이제 존재함일반적인 구성은 클래스마다 하나의 파일을 사용하고, 파일 이름은 클래스 이름을 따릅니다. Account.R에는 account 생성자와 해당 메서드가 들어 있고, Shape.R에는 shape 제네릭이 들어 있습니다. 이 섹션의 과제에서는 코드를 해당 파일에 작성하며, main.R에는 제공된 입력/출력 코드가 들어 있고, 올바른 순서의 source() 줄이 이미 맨 위에 있습니다. 편집기에서는 각 파일이 탭으로 표시됩니다.
Shape.R # 모든 도형이 공유하는 generics: 먼저 source하세요
Circle.R # circle 클래스와 그 메서드들
main.R # source("Shape.R"); source("Circle.R"); 입력을 읽고, 결과를 출력합니다source()는 파일을 전역 환경에서 실행하므로, 해당 파일의 함수와 변수는 전역 이름이 됩니다. R에는 파일 전용 이름이 없습니다. 두 파일이 helper()를 정의하면 나중에 소스된 파일의 정의가 우선됩니다. 소스된 파일에서 한 줄에 값만 있으면 출력되지 않으므로, 무언가를 표시해야 하는 파일에서는 cat()을 호출합니다.
# Tools.R
total <- 0 # 한 번 소싱되면 전역 변수
42 # source()에 의해 출력되지 않음
helper <- function(x) x * 2
# Other.R
helper <- function(x) x + 1 # 나중에 소싱됨: 위의 helper를 대체함챌린지
쉬움프로그램에는 두 개의 파일이 있습니다. main.R은 Greeting.R을 불러오고, 이름을 읽은 다음 각 이름에 대해 greeting(name)의 결과를 출력합니다. Greeting.R에서 greeting()을 완성하여 이름이 Ada일 때 Hello, Ada!를 반환하고, 이름이 비어 있을 때는 Hello, friend!를 반환하도록 하세요.
코드는 Greeting.R에 작성합니다. main.R에는 제공된 입력/출력 코드가 들어 있으며 편집할 수 없습니다.
직접 해보기
source("Greeting.R")
# 제공된 입력/출력 코드: 있는 그대로 유지하세요
input <- suppressWarnings(readLines(file("stdin")))
for (name in input) cat(greeting(name), "\n", sep = "")
이 레슨에는 짧은 퀴즈가 포함되어 있습니다. 레슨을 시작해 문제를 풀고 진행 상황을 기록하세요.
객체 지향 프로그래밍의 모든 레슨
직접 연습해 보세요: 온라인 R 컴파일러