Ruby의 파일 입출력

2020-12-16 hit count image

Ruby에서 파일의 입출력을 다루는 방법에 대해서 알아봅시다.

개요

이번 블로그에서는 Ruby에서 파일을 다루기 위한 방법을 살펴보도록 합니다.

스트림

Ruby언어에서 파일과 데이터를 주고받을 때 스트림(stream)이라는 개념을 사용합니다. Ruby에서는 스트림을 통해 데이터의 입출력을 합니다.

다음은 Ruby에서 파일을 읽고 쓰는 절차입니다.

  1. 데이터를 흘려보내기 위한 스트림을 준비한다.
  2. 파일에서 프로그램으로 또는 프로그램에서 파일로 데이터를 흘려보낸다.
  3. 스트림을 닫는다.

파일은 크게 텍스트 파일과 바이너리 파일이 있습니다. 이에 따라 스트림도 문자 스트림과 바이트 스트림이 있습니다.

스트림설명
문자 스트림16비트 유니코드 문자 데이터를 다룹니다.
바이트 스트림8비트 데이터를 다룹니다.

스트림을 다룰 때는 IO 클래스를 사용하며 파일의 입출력에는 IO 클래스의 서브 클래스인 File 클래스를 사용합니다.

클래스설명
IO 클래스프로그램에서 외부와 데이터를 주고 받기 위한 기능 제공
File 클래스파일의 읽기, 쓰기 기능 제공

이번 블로그에서는 텍스트만 다루도록 하겠습니다.

파일 읽기

파일을 읽기 위해서는 다음과 같은 절차를 따릅니다.

  1. 파일 열기

    파일을 열기 위해서는 open 메서드 또는 File.open 메서드를 사용합니다.

     io = open(fileName, "r")
     io = File.open(fileName, "r")
    

    파일을 열 때, 모드를 지정할 수 있습니다.

    모드설명
    r읽기 모드
    w쓰기 모드
    a추가 쓰기 모드
  2. 데이터 읽기

    다음과 같이 read 메서드를 사용하면, 데이터를 전부 읽어 올 수 있습니다.

     io.read
    

    파일의 용량이 큰 경우, 한번에 읽어오면 메모리 문제가 발생할 수 있습니다. 파일의 용량이 큰 경우 다음과 같이 gets 메서드를 사용하여, 한줄씩 읽어 올 수 있습니다.

     while data = io.gets
       puts data
     end
    
  3. 파일 닫기

    필요한 모든 동작을 수행하였다면, close 메소드를 사용하여 파일을 닫습니다.

     io.close
    

파일 쓰기

텍스트 파일에 데이터를 쓰는 경우 다음과 같은 절차를 따릅니다.

  1. 파일 열기

    텍스트 파일에 데이터를 쓰기 위해서는, wa 모드를 사용하여 파일을 열어야 합니다.

     io = open(fileName, "w")
    
  2. 데이터 쓰기

    다음과 같이 write 메서드를 사용하여 데이터를 파일에 씁니다.

     io.write("Hello world")
    
  3. 파일 닫기

    파일에 데이터를 모두 썼다면, 다음과 같이 파일을 닫아줍니다.

     io.close
    

예제

다음은 파일 입출력에 관한 예제입니다.

data = "Hello world"
io = open("example.txt", "w")
io.write(data)
io.close

io = open("example.txt")
io.each {|line|
  puts line
}
io.close

완료

이것으로 Ruby에서 파일을 읽고 쓰는 방법에 대해서 알아보았습니다. 파일을 다룰 때 가장 중요한 점은 파일을 다 사용한 후 꼭 close를 사용하여 다 사용한 파일은 닫아야 하는 것입니다. 파일을 닫지 않으면 다른 프로세스가 파일을 읽을 수 없어 문제가 발생할 수 있습니다.

제 블로그가 도움이 되셨나요? 하단의 댓글을 달아주시면 저에게 큰 힘이 됩니다!

앱 홍보

책 홍보

블로그를 운영하면서 좋은 기회가 생겨 책을 출판하게 되었습니다.

아래 링크를 통해 제가 쓴 책을 구매하실 수 있습니다.
많은 분들에게 도움이 되면 좋겠네요.

스무디 한 잔 마시며 끝내는 React Native, 비제이퍼블릭
스무디 한 잔 마시며 끝내는 리액트 + TDD, 비제이퍼블릭
[심통]현장에서 바로 써먹는 리액트 with 타입스크립트 : 리액트와 스토리북으로 배우는 컴포넌트 주도 개발, 심통
Posts