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)이 있음

  • 라이프타임이 생략되어있어도 컴파일러가 추론할수 있도록 함.
  • 추론이 완전하지않으므로 에러가 뜰 수 있음. 에러가 뜨는 경우 명시해서 작성하면됨.
  1. 컴파일러가 참조자인 모든 매개변수에 라이프타임을 할당한다
  2. 만약 입력 라이프타임 매개변수가 하나라면, 해당 라이프타임을 출력 라이프타임에 대입한다
  3. 입력 라이프타임 매개변수가 여러 개이고, 그 중 하나가 &self나 &mut self라면, self의 라이프타임을 모든 출력 라이프타임 매개변수에 대입한다.
    • 메서드인 경우에 적용

정적 라이프타임('static)

  • 프로그램의 전체 생애주기동안 살아있는 참조자.
    • ex) 모든 문자열 리터럴
  • 정적 라이프타임을 사용하기전에 실제로 유지되어야만 하는 참조자인지 고민해봐야함. 

https://doc.rust-kr.org/ch10-03-lifetime-syntax.html