본문 바로가기
카테고리 없음

Rust에서 파일 입출력(IO) 다루기

by mystory55801 2025. 5. 30.

Rust에서 파일 입출력이 중요한 이유

Rust는 시스템 프로그래밍 언어로서 안전성과 성능을 모두 추구합니다. 파일 입출력(IO)은 대부분의 응용 프로그램에서 필수적인 요소이며, Rust에서도 이를 안전하고 효율적으로 처리할 수 있는 강력한 기능을 제공합니다.

Rust의 표준 라이브러리는 std::fsstd::io 모듈을 통해 파일 처리 기능을 지원합니다. 이번 글에서는 파일을 읽고 쓰는 기본적인 방법부터 에러 핸들링까지 Rust의 IO를 깊이 있게 다루어 보겠습니다.

Rust에서 파일 쓰기: 파일 생성 및 내용 저장

Rust에서 파일에 데이터를 쓰기 위해서는 std::fs::File 모듈과 std::io::Write 트레이트를 사용합니다. 아래는 간단한 예제입니다.


use std::fs::File;
use std::io::Write;

fn main() -> std::io::Result<()> {
    let mut file = File::create("example.txt")?;
    file.write_all(b"Hello, Rust!")?;
    Ok(())
}

위 코드에서는 File::create를 사용해 새 파일을 만들고, write_all 메서드를 사용해 문자열을 저장합니다. 에러 처리를 위해 Result 타입을 반환하는 것도 중요한 포인트입니다.

Rust에서 파일 읽기: 파일의 내용 불러오기

파일을 읽는 방법은 여러 가지가 있으며, 가장 간단한 방법 중 하나는 std::fs::read_to_string을 사용하는 것입니다.


use std::fs;

fn main() -> std::io::Result<()> {
    let contents = fs::read_to_string("example.txt")?;
    println!("파일 내용: {}", contents);
    Ok(())
}

이 예제는 지정한 파일을 문자열로 읽어들입니다. 텍스트 파일을 다룰 때 간단하게 구현할 수 있다는 장점이 있습니다.

에러 핸들링: 안전한 파일 입출력을 위한 필수 요소

Rust의 에러 처리 시스템은 매우 강력하며, Result 타입을 통해 입출력 도중 발생할 수 있는 다양한 예외 상황을 안전하게 처리할 수 있습니다.

예를 들어, 파일이 존재하지 않거나 접근 권한이 없을 때 unwrap()을 사용할 경우 프로그램이 패닉(panic)을 일으킬 수 있으므로, match 또는 ? 연산자를 사용하는 것이 바람직합니다.

버퍼를 이용한 고성능 파일 입출력

BufReaderBufWriter는 큰 파일을 처리할 때 성능 향상에 도움을 주는 버퍼 기반 IO 도구입니다.


use std::fs::File;
use std::io::{BufReader, BufRead};

fn main() -> std::io::Result<()> {
    let file = File::open("example.txt")?;
    let reader = BufReader::new(file);

    for line in reader.lines() {
        println!("{}", line?);
    }

    Ok(())
}

이 예제는 파일을 줄 단위로 읽어 들이는데 적합하며, 대용량 파일에서도 메모리를 효율적으로 사용할 수 있습니다.

Rust IO에서 자주 사용하는 주요 함수 정리

  • File::create: 새 파일 생성
  • File::open: 기존 파일 열기
  • write_all: 파일에 데이터 쓰기
  • read_to_string: 전체 파일을 문자열로 읽기
  • BufReader::new: 버퍼 기반 파일 읽기

결론: 안전하고 강력한 Rust 파일 IO

Rust에서 파일 입출력을 다루는 것은 다소 복잡해 보일 수 있지만, 안전성과 성능을 모두 보장하기 위해 정교하게 설계된 시스템입니다. std::fsstd::io 모듈을 익히고 활용하면 다양한 응용 프로그램에서 견고한 파일 처리 기능을 구현할 수 있습니다.

이번 포스트에서는 기본적인 파일 쓰기, 읽기부터 에러 처리, 버퍼 사용까지 Rust IO의 핵심 개념을 살펴보았습니다. 앞으로도 더 다양한 Rust 주제로 깊이 있는 내용을 계속 다루어 보겠습니다.