STUDY/Rust
Rust - 12. 라이프 타임
sinawi95
2024. 3. 5. 20:51
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