루비는 간결하고 직관적인 문법 덕분에 많은 개발자들에게 사랑받는 프로그래밍 언어입니다. 그 중에서도 IO(입출력) 작업은 파일, 네트워크, 콘솔 등 다양한 데이터 소스와 상호작용하는 데 필수적입니다. 이 글에서는 루비의 IO 작업에 대해 자세히 알아보고, 다양한 예제를 통해 실습해보겠습니다.
IO는 Input/Output의 약자로, 데이터의 입력과 출력을 의미합니다. 루비에서는 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" 모드는 파일을 읽기 모드로 엽니다.
루비에서 파일을 열 때 사용할 수 있는 다양한 모드가 있습니다. 주요 모드는 다음과 같습니다:
루비의 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 작업을 실습해보며 더 깊이 있는 이해를 쌓아보세요. 루비의 매력을 느끼고, 다양한 프로젝트에 활용해보시기 바랍니다!
© 2024 RailsInsights. All rights reserved.