Rails Insights

루비 IO 작업 이해하기

루비는 간결하고 직관적인 문법 덕분에 많은 개발자들에게 사랑받는 프로그래밍 언어입니다. 그 중에서도 IO(입출력) 작업은 파일, 네트워크, 콘솔 등 다양한 데이터 소스와 상호작용하는 데 필수적입니다. 이 글에서는 루비의 IO 작업에 대해 자세히 알아보고, 다양한 예제를 통해 실습해보겠습니다.

IO란 무엇인가?

IO는 Input/Output의 약자로, 데이터의 입력과 출력을 의미합니다. 루비에서는 IO 객체를 통해 파일, 소켓, 표준 입력 및 출력을 다룰 수 있습니다. 루비의 IO 클래스는 다양한 메서드를 제공하여 이러한 작업을 쉽게 수행할 수 있도록 도와줍니다.

루비의 IO 클래스

루비의 IO 클래스는 파일 및 다른 데이터 소스와의 상호작용을 위한 기본 클래스입니다. IO 클래스는 다음과 같은 주요 기능을 제공합니다:

  • 파일 읽기 및 쓰기
  • 버퍼링 및 스트리밍
  • 소켓을 통한 네트워크 통신
  • 표준 입력 및 출력 처리

파일 읽기 및 쓰기

루비에서 파일을 읽고 쓰는 것은 매우 간단합니다. 다음은 파일을 생성하고 내용을 쓰는 예제입니다.

# 파일 생성 및 쓰기
File.open("example.txt", "w") do |file|
  file.puts "안녕하세요, 루비!"
  file.puts "파일 IO 작업을 배우고 있습니다."
end

위의 코드는 "example.txt"라는 파일을 생성하고, 두 줄의 텍스트를 파일에 씁니다. "w" 모드는 파일을 쓰기 모드로 열며, 파일이 이미 존재하는 경우 기존 내용을 덮어씁니다.

파일 읽기

파일을 읽는 것도 간단합니다. 다음은 방금 생성한 파일을 읽는 예제입니다.

# 파일 읽기
File.open("example.txt", "r") do |file|
  file.each_line do |line|
    puts line
  end
end

위의 코드는 "example.txt" 파일을 읽고, 각 줄을 출력합니다. "r" 모드는 파일을 읽기 모드로 엽니다.

파일 모드

루비에서 파일을 열 때 사용할 수 있는 다양한 모드가 있습니다. 주요 모드는 다음과 같습니다:

  • w: 쓰기 모드 (파일이 존재하면 덮어씀)
  • a: 추가 모드 (파일 끝에 추가)
  • r: 읽기 모드 (기본 모드)
  • r+: 읽기 및 쓰기 모드
  • w+: 읽기 및 쓰기 모드 (파일이 존재하면 덮어씀)
  • a+: 읽기 및 추가 모드

버퍼링 및 스트리밍

루비의 IO 클래스는 버퍼링 및 스트리밍을 지원합니다. 이는 대량의 데이터를 처리할 때 유용합니다. 다음은 파일을 스트리밍 방식으로 읽는 예제입니다.

# 파일을 스트리밍 방식으로 읽기
File.open("example.txt", "r") do |file|
  while (line = file.gets)
    puts line
  end
end

위의 코드는 파일을 한 줄씩 읽어 출력합니다. 이 방법은 메모리 사용을 최소화하면서 큰 파일을 처리할 수 있습니다.

소켓을 통한 네트워크 통신

루비는 소켓을 사용하여 네트워크 통신을 수행할 수 있습니다. 다음은 간단한 TCP 클라이언트를 만드는 예제입니다.

require 'socket'

# TCP 클라이언트 생성
socket = TCPSocket.new('localhost', 2000)

# 서버에 메시지 전송
socket.puts "안녕하세요, 서버!"

# 서버로부터 응답 받기
response = socket.gets
puts "서버로부터 응답: #{response}"

# 소켓 닫기
socket.close

위의 코드는 로컬호스트의 2000번 포트에 연결하여 서버에 메시지를 전송하고, 서버로부터 응답을 받습니다.

표준 입력 및 출력 처리

루비에서는 표준 입력과 출력을 쉽게 처리할 수 있습니다. 다음은 사용자로부터 입력을 받고 출력하는 예제입니다.

# 사용자 입력 받기
print "이름을 입력하세요: "
name = gets.chomp

# 입력된 이름 출력
puts "안녕하세요, #{name}님!"

위의 코드는 사용자에게 이름을 입력받고, 입력된 이름을 사용하여 인사말을 출력합니다. gets 메서드는 표준 입력으로부터 한 줄을 읽어옵니다.

예외 처리

파일 작업을 수행할 때는 예외 처리가 중요합니다. 파일이 존재하지 않거나 읽기/쓰기 권한이 없을 경우 예외가 발생할 수 있습니다. 다음은 예외 처리를 포함한 파일 읽기 예제입니다.

begin
  File.open("non_existent_file.txt", "r") do |file|
    puts file.read
  end
rescue Errno::ENOENT
  puts "파일이 존재하지 않습니다."
end

위의 코드는 존재하지 않는 파일을 읽으려 할 때 발생하는 예외를 처리합니다. Errno::ENOENT는 파일이 존재하지 않을 때 발생하는 예외입니다.

결론

루비의 IO 작업은 파일, 네트워크, 표준 입력 및 출력을 다루는 데 매우 유용합니다. 다양한 메서드와 모드를 통해 개발자는 쉽게 데이터를 읽고 쓸 수 있습니다. 이 글에서 소개한 내용을 바탕으로 루비의 IO 작업을 실습해보며 더 깊이 있는 이해를 쌓아보세요. 루비의 매력을 느끼고, 다양한 프로젝트에 활용해보시기 바랍니다!

Published: August 12, 2024

© 2024 RailsInsights. All rights reserved.