Rust — 컴파일러가 막는 것들 · 소유권과 빌림 · 퀴즈
소유권 확인
문항 6개. 정답과 해설은 풀어 본 뒤에 보여 드립니다.
`let s = String::from("hi"); let t = s;` 뒤에 `s` 를 쓰면?
- 복사돼서 잘 동작한다
- 컴파일 오류 — 주인이 t 로 옮겨졌다
- 실행 중 오류
- 경고만 난다
읽기 빌림이 살아 있는 상태에서 `v.push(...)` 가 막히는 이유는?
- 빌림 문법이 애초에 틀려서
- push 가 재할당하면 기존 참조가 무효가 되기 때문
- `Vec` 이 기본적으로 불변이라서
- 스레드 안전을 위한 제약이라서
빌림의 수명은 언제까지인가?
- 블록 끝까지
- 함수 끝까지
- 프로그램 끝까지
- 마지막으로 쓰인 지점까지
소유권과 싸우다 막혔을 때 실무에서 합리적인 첫 선택은?
- clone() 하고 넘어간다
- unsafe 를 쓴다
- 전역 변수로 뺀다
- Rc<RefCell<>> 로 감싼다
`unsafe` 블록에 대한 올바른 이해는?
- 컴파일러가 검사할 수 없으니 내가 보증한다는 표시
- 어떤 경우에도 쓰면 안 되는 것
- 성능을 올려 주는 최적화 힌트
- 나이틀리 실험 기능을 켜는 것
에러를 다룰 때 `unwrap()` 대신 `match`/`?` 를 쓰는 이유는?
- `match` 가 더 빠르기 때문에
- 돌아오는 타입이 서로 달라서
- 실패하면 그 자리에서 panic 이라서
- clippy 가 경고를 내기 때문에