Inflearn brand logo image

인프런 커뮤니티 질문&답변

조예인님의 프로필 이미지
조예인

작성한 질문수

우아한 고성능 프로그래밍 언어 Rust 입문 및 활용

임대값의 수명 (10/23 업데이트)

임대값 수명에 대한 질문

해결된 질문

작성

·

67

1

안녕하세요!

영상을 보고 아래 함수에서 반환값의 수명은 매개변수로 주어진 s1 과 s2 중 수명이 더 긴 것으로 채택된다고 이해했는데요! 러스트 공식문서에서는 더 작은것이 채택된다고 적혀있어서 어떤게 정답인지 궁금합니다.

fn longest<'a>(s1: &'a str, s2: &'a str) -> &'a str {
    if s1.len() > s2.len() {
        s1
    } else { 
        s2
    }
}

답변 1

0

김대현님의 프로필 이미지
김대현
지식공유자

이번에도 좋은 질문 감사합니다.

제가 강의에서 말한 내용과 링크주신 문서의 내용이 사실 같은 내용입니다.

저도 처음에 헷갈린 부분인데요, 임대값의 수명을 관리하는 것이 실제로 원래값의 생명에 영향을 주지 않습니다. 내가 임대한 것을 더 길게 쓰고 싶다고 해서 원래값이 메모리에 더 남아 있거나 하는 게 아닌 거죠. 단지 원래 값들은 소유자가 선언된 스코프에서 벗어나면 그저 메모리에서 사라질 뿐입니다. 임대값들은 그 원래값이 유지된 범위 안에서만 활용할 수 있기에, 임대검사기가 그 임대값들이 해당 수명 범위 안에서 쓰이고 있는지를 컴파일 시간에 검사해주는 것입니다.

채택이라는 표현으로 보아, 아마도 어떤 수명으로 확보되는 것으로 이해하신 게 아닌가 추측되는데요, 채택이 아니라, 그 수명이 확보되는 조건이어야만 컴파일이 된다라고 이해하면 어떨까 싶습니다.

 

s1과 s2는 원래값의 참조값인데, 원래 값들의 수명이 있을 것이고, 그 수명보다 반환값의 수명이 같거나 짧아야 문제가 없겠죠. 제가 발언한 내용은 원래값들의 수명이 더 길어야 한다고 얘기한 것이라서, 어느 측면에서 보느냐에 따라 뭐가 긴지 짧은지가 다른 것뿐, 사실 같은 내용입니다.

 

a >= b

 

이어야 하는데, a입장에서는 같거나 커야한다는 의미가 되는 것이고, b입장에서는 같거나 작아야 한다는 뜻인 거죠.

 

핵심은, 참조값의 수명은 원래값의 수명보다 같거나 짧아야만 한다.

그걸 문제없는지 확인해주는 것이 임대검사기다라고 이해해주시면 좋을 것 같습니다.

 

다시 정리하면, longest함수에서 쓰인 참조값 s1, s2, 반환값(이 경우 반환값도 참조값) 3개 참조값의 수명을 놓고 볼 때, 반환값의 수명은 s1이나 s2의 수명과 연결되는데, 뭐일지는 실제 런타임시의 값에 따라 다르니까 둘 중 짧은 수명을 기준으로 반환값의 수명이 만족되어야 하는 상황입니다. 이게 링크주신 문서에 있는 내용이고, 제가 강의에서 말한 내용은, 반환값의 수명보다 s1, s2의 수명이 같거나 길어야한다는 내용이므로, 이는 같은 뜻이에요

 

s1의 수명과 s2의 수명 중 짧은 것의 수명이 반환값의 수명이 된다

==

반환값의 수명보다, s1의 수명과 s2의 수명이 같거나 길어야 한다.

 

명확해졌기를 바랍니다.

조예인님의 프로필 이미지
조예인

작성한 질문수

질문하기