파일 다루기
Coddy Ruby 여정의 객체 지향 프로그래밍 섹션에 포함된 레슨. 57개 중 1번째.
실제 프로그램은 여러 파일로 나뉩니다. Ruby 파일은 require_relative를 사용하여 다른 파일을 불러오며, 그 뒤에 현재 파일을 기준으로 한 파일의 경로를 지정합니다. 보통 .rb 확장자는 생략합니다. 해당 줄 이후에는 불러온 파일의 메서드와 클래스를 사용할 수 있습니다:
# greeting.rb
def greeting(name)
"Hello, #{name}!"
end
# main.rb
require_relative 'greeting'
puts greeting("Ada")ruby main.rb를 실행하면 Hello, Ada!가 출력됩니다. main.rb가 greeting.rb를 불러온 다음 그 파일의 메서드를 호출하기 때문입니다.
프로그램은 실행하는 파일에서 시작합니다. 여기서는 main.rb이며, Ruby는 이 파일을 위에서 아래로 실행합니다. require_relative은 해당 시점에 다른 파일을 실행하며, 처음 한 번만 실행합니다. 두 번째 require_relative 'greeting'은 false를 반환하고 아무 작업도 하지 않습니다. 이름은 해당 이름을 정의한 파일이 로드된 후에만 사용할 수 있습니다:
# main.rb
# puts greeting("Bo") # NoMethodError: greeting.rb가 아직 로드되지 않음
require_relative 'greeting' # greeting.rb를 실행하고 true를 반환함
require_relative 'greeting' # 이미 로드됨, false를 반환함
puts greeting("Bo")일반적인 구성은 파일 하나당 클래스 하나를 두고, 파일 이름은 클래스 이름을 snake_case로 작성하는 것입니다. class Dog은 dog.rb에, class BankAccount은 bank_account.rb에 있습니다. 이 섹션의 과제에서는 main.rb에 제공된 입력/출력 코드가 들어 있으며, 로드 순서에 따라 파일마다 하나씩 require_relative 줄로 시작합니다. 다른 클래스가 기반으로 삼는 클래스가 먼저 로드됩니다.
dog.rb # class Dog ... end
bank_account.rb # class BankAccount ... end
functions.rb # 헬퍼 메서드
main.rb # require_relative 줄들, 그 다음 입출력 코드파일이 공유하는 내용은 이름의 종류에 따라 달라집니다. 파일 맨 위에서 def로 정의된 메서드, 클래스 및 상수는 그 파일 이후에 로드된 모든 파일에서 사용할 수 있습니다. 지역 변수는 해당 파일에만 속합니다:
# settings.rb
limit = 3 # 지역 변수: settings.rb만 볼 수 있음
MAX_ITEMS = 3 # 상수: 로드 후 보임
def limit_text
"at most #{MAX_ITEMS}"
end
# main.rb
require_relative 'settings'
puts limit_text # at most 3
puts MAX_ITEMS # 3
# puts limit # NameError: 정의되지 않은 지역 변수챌린지
쉬움프로그램에는 두 개의 파일이 있습니다. main.rb은 greeting.rb을 로드하고, 이름을 읽은 다음 greeting(name)의 결과를 출력합니다. greeting.rb에서 greeting을 완성하여 이름이 Ada일 때 Hello, Ada!를 반환하고, 이름이 비어 있을 때는 Hello, friend!를 반환하도록 하세요.
코드는 greeting.rb에 작성하세요. main.rb에는 제공된 입력/출력 코드가 포함되어 있으므로 편집할 수 없습니다.
직접 해보기
require_relative 'greeting'
# 제공된 입력/출력 코드: 그대로 유지하세요
input = []
while (line = gets)
input << line.chomp
end
input.each { |name| puts greeting(name) }
이 레슨에는 짧은 퀴즈가 포함되어 있습니다. 레슨을 시작해 문제를 풀고 진행 상황을 기록하세요.
객체 지향 프로그래밍의 모든 레슨
직접 연습해 보세요: 온라인 Ruby 컴파일러