Files
ruby-examples/docs/05_파일 처리 및 입출력.md

4.9 KiB

Ruby에서 파일 처리 및 입출력(IO) 다루기

프로그램을 작성하다 보면 데이터를 파일에 저장하거나, 파일에서 데이터를 읽어와야 할 때가 많다. Ruby에서는 파일을 간편하게 읽고 쓸 수 있는 다양한 기능을 제공한다. 이번 글에서는 파일 읽기/쓰기, 표준 입출력(STDIN, STDOUT, STDERR), 디렉터리 작업 등을 다룬다.


1. 파일 읽고 쓰기 (File 클래스)

Ruby에서 파일을 다룰 때는 File 클래스를 사용한다. 파일을 열 때는 File.open을 사용하며, 읽기 모드, 쓰기 모드 등을 지정할 수 있다.

1.1. 파일 쓰기 (w, a, w+, a+)

파일 새로 쓰기 (w 모드)

파일을 새로 생성하고 데이터를 저장한다. 기존 파일이 있으면 덮어쓴다.

File.open("example.txt", "w") do |file|
  file.puts "Hello, Ruby!"
  file.puts "파일 쓰기 예제입니다."
end
  • puts → 문자열을 출력하고 자동으로 개행(\n) 추가
  • write → 개행 없이 그대로 출력
File.open("example.txt", "w") do |file|
  file.write "Hello, Ruby!"
  file.write "이건 개행이 없습니다."
end

출력 결과 (example.txt):

Hello, Ruby!이건 개행이 없습니다.

파일 이어 쓰기 (a 모드)

기존 파일이 있으면 내용을 유지하면서 새로운 내용을 추가한다.

File.open("example.txt", "a") do |file|
  file.puts "새로운 줄이 추가됩니다."
end

읽기와 쓰기 (w+, a+ 모드)

  • w+ → 읽기 + 쓰기 가능, 기존 파일 삭제 후 새로 생성
  • a+ → 읽기 + 쓰기 가능, 기존 내용 유지하며 추가 가능

1.2. 파일 읽기 (r, r+)

한 줄씩 읽기 (gets)

File.open("example.txt", "r") do |file|
  puts file.gets  # 첫 번째 줄 읽기
end

모든 줄 읽기 (readlines)

파일의 모든 줄을 배열로 읽어온다.

File.open("example.txt", "r") do |file|
  file.readlines.each do |line|
    puts line
  end
end

파일 전체 읽기 (read)

파일 내용을 한 번에 읽어 문자열로 반환한다.

content = File.read("example.txt")
puts content

파일 존재 여부 확인

if File.exist?("example.txt")
  puts "파일이 존재합니다!"
else
  puts "파일이 없습니다."
end

2. 파일 삭제 및 기타 기능

2.1. 파일 삭제

File.delete("example.txt") if File.exist?("example.txt")

2.2. 파일 이름 변경

File.rename("old_name.txt", "new_name.txt")

2.3. 파일 크기 확인

puts File.size("example.txt")  # 바이트 단위 크기 반환

3. 표준 입출력 (STDIN, STDOUT, STDERR)

3.1. 콘솔 입력 (STDIN)

사용자로부터 입력을 받을 때는 gets를 사용한다.

puts "이름을 입력하세요:"
name = gets.chomp  # 개행 문자 제거
puts "안녕하세요, #{name}님!"

3.2. 표준 출력 (STDOUT)

puts, print, p를 이용해 출력할 수 있다.

puts "Hello, Ruby!"  # 개행 포함
print "Hello, "  # 개행 없음
print "World!\n"
p [1, 2, 3]  # 디버깅용 출력

출력 결과:

Hello, Ruby!
Hello, World!
[1, 2, 3]

3.3. 오류 출력 (STDERR)

오류 메시지는 STDERR.puts를 사용해 출력할 수 있다.

STDERR.puts "이건 오류 메시지입니다!"

4. 디렉터리 작업 (Dir 클래스)

4.1. 디렉터리 생성 및 삭제

Dir.mkdir("my_folder") unless Dir.exist?("my_folder")  # 폴더 생성
Dir.rmdir("my_folder")  # 폴더 삭제 (비어있을 때만 가능)

4.2. 디렉터리 내 파일 목록 조회

puts Dir.entries(".")  # 현재 디렉터리의 파일 및 폴더 목록 출력

5. 실전 예제: 로그 파일 기록기

class Logger
  LOG_FILE = "log.txt"

  def self.log(message)
    File.open(LOG_FILE, "a") do |file|
      file.puts("[#{Time.now}] #{message}")
    end
  end
end

Logger.log("프로그램이 실행되었습니다.")
Logger.log("사용자가 로그인했습니다.")

출력 (log.txt):

[2025-03-03 12:34:56] 프로그램이 실행되었습니다.
[2025-03-03 12:35:10] 사용자가 로그인했습니다.

6. 마무리

Ruby에서는 파일과 입출력을 간편하게 다룰 수 있다.

  • 파일 쓰기"w", "a", "w+", "a+" 모드
  • 파일 읽기gets, readlines, read
  • 파일 관리File.exist?, File.delete, File.rename, File.size
  • 입출력(IO)gets로 입력 받기, puts로 출력, STDERR.puts로 오류 출력
  • 디렉터리 작업Dir.mkdir, Dir.entries

이제 Ruby에서 파일을 활용하여 로그 기록, 데이터 저장, 설정 파일 관리 등을 할 수 있다.