Notice
Recent Posts
Recent Comments
Link
| 일 | 월 | 화 | 수 | 목 | 금 | 토 |
|---|---|---|---|---|---|---|
| 1 | 2 | 3 | 4 | 5 | 6 | 7 |
| 8 | 9 | 10 | 11 | 12 | 13 | 14 |
| 15 | 16 | 17 | 18 | 19 | 20 | 21 |
| 22 | 23 | 24 | 25 | 26 | 27 | 28 |
| 29 | 30 | 31 |
Tags
- Vite
- Ollama
- path
- docker
- podman compose
- 시작하기
- podman
- Java
- 절대경로
- vscode
- .dockerignore
- html canvas
- File
- tauri
- io
- getting started
- glm-ocr
- cli
- FileChannel
- curl
- React
- qwen3-coder-next
- config
- dockerfile
- Typescript
- RandomAccessFile
- Docker Compose
- Webpack
Archives
- Today
- Total
워로디스
Rust 함수에서 문자열 참조를 파라미터로 받을 때의 형식 본문
1. 가장 일반적인 형태 — &str
fn print_name(name: &str) {
println!("name = {}", name);
}
이것이 표준적인 방식입니다.
&String&str- 문자열 리터럴
"abc"
모두 받을 수 있습니다.
사용 예
let s = String::from("Yongtae");
print_name(&s); // &String → &str 자동 변환
print_name("hello"); // 리터럴
실무에서는 대부분 &str를 사용합니다.
2. 명시적 라이프타임 포함
fn print_name<'a>(name: &'a str) {
println!("{}", name);
}
이 경우 'a는 명시했을 뿐, 실제로는 필요 없습니다.
Rust의 lifetime elision 규칙에 의해 자동으로 처리됩니다.
3. &String으로 받는 경우 (권장되지 않음)
fn print_name(name: &String) {
println!("{}", name);
}
이 방식은 권장되지 않습니다.
"literal"을 받을 수 없음&str을 받을 수 없음- 불필요하게 타입이 구체적임
가능하면 &str로 받는 것이 올바른 방식입니다.
4. 소유권을 가져오고 싶을 때 — String
fn consume_name(name: String) {
println!("{}", name);
}
이 경우 호출 이후 원래 변수는 사용할 수 없습니다.
문자열의 소유권이 함수로 이동합니다.
5. 더 유연한 형태 — impl AsRef<str>
라이브러리 설계 시 사용하는 패턴입니다.
fn print_name<S: AsRef<str>>(name: S) {
println!("{}", name.as_ref());
}
String&String&str
모두 받을 수 있습니다.
단순한 내부 함수라면 과도한 설계일 수 있습니다.
정리
| 목적 | 권장 타입 |
|---|---|
| 읽기 전용 문자열 받기 | &str |
| 소유권 가져오기 | String |
| 범용 라이브러리 설계 | impl AsRef<str> |
| 피해야 할 것 | &String |
문자열 참조를 파라미터로 받는 가장 일반적이고 권장되는 형태는 다음입니다:
fn foo(s: &str)
