개발 지식

개발 지식

Rust Cow를 쓰면 복사와 참조를 동시에 유연하게 처리할 수 있다

페이지 정보

profile_image
영삼이
0건 120회 25-03-28 15:17

본문

Cow를 쓰면 복사와 참조를 동시에 유연하게 처리할 수 있다

읽기만 할 땐 참조, 수정이 필요할 때만 복사된다


Rust에서 함수에 문자열을 넘길 때,
String&str을 동시에 지원하고 싶을 때가 있다:

fn process(input: &str) { ... }
  • &str만 받으면 String.as_str() 필요

  • String만 받으면 소유권이 필요


Cow를 쓰면 둘 다 자연스럽게 처리 가능

use std::borrow::Cow;

fn process(input: Cow<str>) {
    println!("길이: {}", input.len());
}
process("hello".into());             // &str
process(String::from("world").into()); // String
  • 읽기만 할 땐 복사하지 않음

  • 수정이 필요한 시점에만 복사됨 (Copy On Write)


활용 예

fn normalize(input: Cow<str>) -> Cow<str> {
    if input.contains(" ") {
        Cow::Owned(input.replace(" ", "_"))
    } else {
        input
    }
}
  • 공백이 없으면 원본 참조 그대로 사용

  • 공백이 있으면 그때만 String으로 복사


✔️ Cow성능과 유연성을 모두 잡을 수 있는 타입
읽기 위주 함수에선 기본값처럼 사용하는 습관을 들이면 좋다.

댓글목록

등록된 댓글이 없습니다.