728x90
어제못했던거 이어서 공부.. 다시봐도 이해가 잘안되네..
1. 라이프타임
참조자가 유효함을 보장하는 기간
라이프타임도 암묵적 추론이 가능하지만 여러 타입이 될 가능성이 있는 경우엔 타입을 명시해야함.
- 라이프타임 매개변수를 지정해도 전달되는 값이나 반환 값의 라이프타임이 변경되는 건 아님
- 제약조건을 지키지 않았을때 대여 검사기가 불합격 판정을 내릴수 있도록 하는것.
- 대여 검사기(borrow checker)로 스코프를 비교해서 대여의 유효성을 판단함.
&i32 // 참조자
&'a i32 // 명시적인 라이프타임이 있는 참조자
&'a mut i32 // 명시적인 라이프타임이 있는 가변 참조자
- 'a와 같이 '(Apostrophe) + 짧은 소문자로 명시함.
라이프타임은 댕글링 참조(dangling reference) 방지가 목적임
- 프로그램이 참조하려고 하는 데이터가 아닌 엉뚱한 데이터를 참조하는 것
라이프타임 생략 규칙(lifetime elision rules)이 있음
- 라이프타임이 생략되어있어도 컴파일러가 추론할수 있도록 함.
- 추론이 완전하지않으므로 에러가 뜰 수 있음. 에러가 뜨는 경우 명시해서 작성하면됨.
- 컴파일러가 참조자인 모든 매개변수에 라이프타임을 할당한다
- 만약 입력 라이프타임 매개변수가 하나라면, 해당 라이프타임을 출력 라이프타임에 대입한다
- 입력 라이프타임 매개변수가 여러 개이고, 그 중 하나가 &self나 &mut self라면, self의 라이프타임을 모든 출력 라이프타임 매개변수에 대입한다.
- 메서드인 경우에 적용
정적 라이프타임('static)
- 프로그램의 전체 생애주기동안 살아있는 참조자.
- ex) 모든 문자열 리터럴
- 정적 라이프타임을 사용하기전에 실제로 유지되어야만 하는 참조자인지 고민해봐야함.
https://doc.rust-kr.org/ch10-03-lifetime-syntax.html
'STUDY > Rust' 카테고리의 다른 글
Rust - 14. I/O 프로젝트 CLI 프로그램 만들기 (0) | 2024.03.11 |
---|---|
Rust - 13. 자동화 테스트 (0) | 2024.03.07 |
Rust - 11. 제네릭 타입, 트레이트 (0) | 2024.03.04 |
Rust - 10. 에러 처리 (0) | 2024.02.26 |
Rust - 9. 컬렉션(vector, string, hash map) (0) | 2024.02.20 |