Menu
Coddy logo textTech

파일 다루기

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를 대체함
challenge icon

챌린지

쉬움

프로그램에는 두 개의 파일이 있습니다. 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 = "")
quiz icon실력 점검

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

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

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