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

영삼이
본문
✅ 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
는 성능과 유연성을 모두 잡을 수 있는 타입
읽기 위주 함수에선 기본값처럼 사용하는 습관을 들이면 좋다.
- 이전글Debug 대신 Display를 구현하면 출력이 유연해진다 25.03.28
- 다음글Rc와 RefCell은 마지막 수단이다 — 안 써도 되는 구조부터 고민하라 25.03.28
댓글목록
등록된 댓글이 없습니다.