프로그래밍Rust 개발자

Rust에서 문자열을 숫자로 읽고 구문 분석하는 방법은 무엇입니까? (예: String에서 i32로 변환) parse 메소드를 사용할 때의 잠재적인 문제는 무엇이며, 변환 오류를 올바르게 처리하는 방법은 무엇인가요?

Hintsage AI 어시스턴트로 면접 통과

답변.

Rust에서 문자열을 숫자로 변환하는 표준 방법은 parse() 메서드입니다. 이를 통해 FromStr 트레잇을 구현하는 타입으로 변환할 수 있으며, 예를 들어 String 또는 &str을 i32, f64 등으로 변환할 수 있습니다.

예제:

let num: i32 = "42".parse().unwrap();

그러나 잘못된 문자열이 나올 경우 오류가 발생합니다 (Result::Err). 애플리케이션의 크래시를 방지하려면 결과를 match를 통해 처리하는 것이 중요합니다:

let input = "abc"; match input.parse::<i32>() { Ok(n) => println!("숫자: {}", n), Err(e) => println!("파싱 오류: {}", e), }

parse 메서드는 "turbofish" (::<i32>)를 통해 타입 오버로드를 지원합니다. 타입을 암시적으로 유추할 수 없는 경우에 사용합니다.

함정 질문.

질문: 컴파일 시 타입을 명시하지 않고 .parse()를 호출하여 올바른 결과를 얻을 수 있나요?

자주 하는 대답: 네, 문자열이 숫자를 포함하고 있다면.

정답: 아니요, 컴파일 시 변환할 타입이 알려져 있어야 합니다. 타입이 명시되지 않으면 (예를 들어, 이후에 명시적으로 사용되지 않는 경우) 컴파일러는 오류를 발생시킵니다.

잘못된 코드 예제:

let x = "10".parse(); // 오류: 어떤 타입으로 파싱할지 불명확함

수정하려면 turbofish를 사용하세요:

let x = "10".parse::<i32>().unwrap();

주제에 대한 세부사항 부족으로 인한 실제 오류 사례.


사례

구성 파일을 파싱하는 모듈에서 .parse().unwrap()을 오류 처리 없이 남겨두었고, 사용자 설정에서의 오타로 인해 panic!이 발생하여 프로덕션 환경에서 애플리케이션이 중단되었습니다.


사례

한 프로젝트에서 개발자들이 타입을 명시하지 않았고 (turbofish를 사용하지 않음), 변수는 중간에 사용되지 않았기 때문에 컴파일러가 타입을 유추할 수 없어 컴파일 단계에서 잡기 힘든 오류가 발생했습니다.


사례

프로젝트에서 문자열에서 큰 숫자를 파싱할 때 실수로 parse::<u8>을 사용하여 오버플로우 오류가 발생했습니다. 오류는 수주 후에 발견되었고, 이로 인해 데이터가 손실되었습니다.