문자열 결합

문자열을 결합하는 방법에 대해 알아보겠습니다. + 연산자와 format! 매크로, push_str과 push를 사용해 문자 또는 문자열을 결합할 수 있습니다. 아래에서 하나씩 살펴보겠습니다.

1. + 연산자

  • 왼쪽 피연산자는 반드시 String이어야 하고
  • 오른쪽 피연산자는 &str이어야 합니다.
fn main() {
let s1 = String::from("Hello");
let s2 = " World";
let s3 = s1 + s2; // s1은 이동(move)되고, s3가 새 String이 됨
println!("{}", s3);
}

⚠️s1은 + 연산 후 사용할 수 없습니다(소유권 이동). 그러나, s2는 s3로 결합된 이후에도 사용할 수 있습니다.


2. format! 매크로 (가장 안전하고 권장)

  • 소유권을 이동하지 않으면서 여러 문자열을 결합 가능.
fn main() {
let s1 = String::from("Hello");
let s2 = String::from("World");
let s3 = format!("{} {}", s1, s2);
println!("{}", s3);
println!("{}", s1); // s1, s2 둘 다 여전히 사용 가능
}

3. push_str / push

  • String에 직접 이어 붙임.
  • push_str의 인수는 String이 아니라 &str여야 합니다.
fn main() {
let mut s = String::from("Hello");
s.push_str(" World"); // 문자열 이어붙이기
s.push('!'); // 문자(char) 추가
println!("{}", s);
}

push_str의 인수로 String을 넣으니 &str이어야 한다고 하면서 에러가 발생합니다.


📌 정리

  • 문자열 결합 → + 연산자(소유권 이동) 또는 format!(안전, 권장)
  • 문자 추가 → push, push_str
  • 문자(char) 타입은 'a'처럼 작은따옴표 사용, 문자열은 "abc"처럼 큰따옴표 사용.

문자열(String, &str) 결합 방법을 비교하는 표

구분타입결합 방법소유권 이동 여부예제
문자열 결합 ①String + &str+ 연산자왼쪽 String 이동let s1 = String::from(“Hi”);
let s2 = s1 + ” Rust”;
문자열 결합 ②String + String불가능(직접은 안 됨)String 둘 다 소유권 문제 → + 사용 시 오른쪽을 &s2로 변경 필요
문자열 결합 ③여러 문자열format! 매크로이동 없음let s1 = “Hi”;
let s2 = “Rust”;
let s3 = format!(“{} {}”, s1, s2);
문자열에 덧붙이기String + &strpush_str()없음let mut s = String::from(“Hi”);
s.push_str(” Rust”);
문자 추가String + charpush()없음let mut s = String::from(“Hi”);
s.push(‘!’);
문자 결합char + char직접 불가 → String 변환 후 결합변환 후 결합let c1 = ‘A’;
let c2 = ‘B’;
let s = format!(“{}{}”, c1, c2);
fn main() {
    let c1 = 'A';
    let c2 = 'B';
    let s = c1.to_string() + &c2.to_string(); // char를 String으로 변환 후 이어붙이기
    println!("{}", s);
}

💡 포인트

  • + 연산자는 왼쪽 String을 소비하므로 이후에 사용할 수 없음.
  • format!은 안전하고 가독성 좋음 → 대부분의 경우 권장.
  • char끼리는 직접 결합 연산자가 없으니 문자열로 변환해서 결합해야 함.

답글 남기기

이메일 주소는 공개되지 않습니다. 필수 필드는 *로 표시됩니다