| 일 | 월 | 화 | 수 | 목 | 금 | 토 |
|---|---|---|---|---|---|---|
| 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 |
- Go-lang
- 회고
- 커머스
- 디자인 패턴
- MAPF
- 오블완
- ssh
- 경로 계획 알고리즘
- leetcode
- docker
- Playwright
- 신혼 여행
- AWS 비용 절감
- Rust
- 티스토리챌린지
- study
- 구조 패턴
- AWS
- DevOps
- 14일 공부
- PostgreSQL
- 청첩장 모임
- github
- Til
- 논문 정리
- 실용주의 프로그래머
- 지표
- amazon ecs
- 생성 패턴
- terraform
- Today
- Total
밤 늦게까지 여는 카페
[rust 공식 문서 14일 공부] 8일차 본문
9. Error Handling
rust는 에러를 1)회복 가능한 에러와 2)회복 불가능한 에러, 2가지로 구분합니다.
- 회복 가능한 에러의 예시로는 파일을 못 찾았거나 DB에서 원하는 값을 못 찾는 것이 있고
- 회복 불가능한 에러의 예시로는 array의 존재하지 않는 index에 접근하는 것이 있습니다.
이를 위해서 Result<T, E> 타입과 panic이 있는데 한번 공부해보겠습니다!
- +++ rust에는 exception이 없습니다!
9.1. Unrecoverable Errors with panic!
rust는 golang과 유사하게 panic! 매크로를 호출함으로써 panic을 강제로 발생시킬 수 있습니다.
- RUST_BACKTRACE 환경변수를 이용해서 백트레이스도 출력할 수 있습니다.

또한, 존재하지 않는 index로 접근할 때도 패닉이 발생합니다.

9.2. Recoverable Errors with Result
이제 panic을 살펴봤으니 Result<T, E>를 살펴봐야겠죠!
사실 저희는 챕터2에서 guessing game을 만들면서 Result 타입을 사용했습니다.

String 타입의 parse 메소드가 의도한 입력값을 받지 못했을 때를 대비해서 Result 타입을 사용한 것이겠죠.
Result 타입을 다루는 가장 간단한 방법의 위와 같이 match를 이용하는 것입니다.
+++
match 이외에 unwrap, expect 메소드로도 Result 타입을 다룰 수 있습니다.
- unwrap 메소드는 Result 타입이 Error일 경우 Error 내용과 함께 panic! 매크로를 호출합니다.
- expect 메소드는 주어진 메소드와 함께 panic! 매크로를 호출한다는 차이가 있습니다.

panic!을 호출하지 않고 Error를 다루려면 match를 사용해야 하는데 생각보다 불편합니다.
rust는 이를 보조하기 위해서 이미 ? 연산을 준비했습니다.
다음 예시와 같이 Result 타입을 반환하는 메소드 뒤에 ?를 붙여주면
반환된 값이 Error가 아닐 때는 해당 값을 사용하면서 다음 줄을 실행하고, Error가 반환되면 바로 Error를 리턴하게 됩니다.
- 그래서 ? 연산은 Result 타입을 반환하는 함수에서만 사용할 수 있습니다.

9.3. To panic! or Not to panic!
이제 슬슬 언제 panic을 쓰고 언제 Result를 써야하는지 궁금해질 것입니다.
rust 공식 문서에서는 기본적으로 Result를 쓰는 것을 권장하지만 다음과 같은 상황에서는 panic을 발생시키라고 하네요.
- 예시, 프로토타입 코드, 테스트
- 컴파일 상에서는 에러가 발생하지 않지만 로직상 에러가 발생할 수 있는 부분
- 상태를 잘못 처리했을 때 시스템에 영구적으로 문제가 생길 때
+++
에러 처리를 하다보면 코드가 지저분해질 수 있는데 이를 개선하기 위해 새로운 타입을 만드는 것을 추천하더라고요.
'For Fun' 카테고리의 다른 글
| [rust 공식 문서 14일 공부] 10일차 (0) | 2024.12.21 |
|---|---|
| [rust 공식 문서 14일 공부] 9일차 (1) | 2024.12.20 |
| [rust 공식 문서 14일 공부] 7일차 (1) | 2024.12.16 |
| [rust 공식 문서 14일 공부] 6일차 (0) | 2024.12.14 |
| [rust 공식 문서 14일 공부] 5일차 (0) | 2024.12.11 |