Post

2. Rust에서 문자열 리터럴과 String 타입 간의 패턴 매칭과 비교 연산의 차이

Rust에서는 문자열 리터럴과 String 타입 간의 사용법이 다소 혼동스러울 수 있습니다. 특히 패턴 매칭과 비교 연산에서 이 차이를 명확히 이해하는 것이 중요합니다.

일반적으로 if arg == "sum"과 같은 비교 연산은 문자열 리터럴과 String 타입 간의 비교를 허용합니다. 이는 Rust가 문자열 리터럴을 내부적으로 &str 타입으로 처리하기 때문입니다. 이러한 비교는 기본적으로 지원되며, 코드에서도 잘 동작합니다.

하지만 match 구문에서는 패턴 매칭에 사용되는 값과 패턴이 동일한 타입이어야 합니다. 따라서 String 타입의 변수를 사용할 때는 문자열 리터럴을 직접 패턴으로 사용할 수 없습니다.

예를 들어, 아래와 같은 코드에서는 컴파일 에러가 발생합니다.

1
2
3
4
5
match arg {
    "sum" => sum(),
    _ => double(),
}

이 경우, arg는 String 타입인데 문자열 리터럴을 패턴으로 사용하고 있기 때문입니다. 이를 해결하려면 arg를 &str 타입으로 변환하여 패턴 매칭을 해야 합니다.

1
2
3
4
5
match arg.as_str() {
    "sum" => sum(),
    _ => double(),
}

따라서 Rust에서는 비교 연산에서는 문자열 리터럴과 String 타입 간의 비교가 자연스럽게 동작하지만, 패턴 매칭에서는 주의해야 합니다. 패턴 매칭에서는 항상 패턴과 비교할 값의 타입을 일치시켜야 합니다.

This post is licensed under CC BY 4.0 by the author.