[Rust 공식문서 한국어 정리] ㉝. Rust 수명 생략(Lifetime Elision) 규칙
[Rust 공식문서 한국어 정리] ㉝. Rust 수명 생략(Lifetime Elision) 규칙
원문 제목: Lifetime Elision — The Rust Reference
작성자: Rust Language Team
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
📌 1. 서론 — 이 문서가 다루는 내용
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
이 문서는 Rust 컴파일러가 수명(lifetime) 매개변수를 자동으로 추론하는 Elision 규칙을 설명합니다.
함수와 메서드 시그니처에서 명시적인 lifetime annotation을 생략할 수 있는 조건과, 컴파일러가 어떻게 암묵적 수명을 할당하는지를 다룹니다.
수명 생략은 코드의 가독성을 높이면서도 메모리 안전성을 해치지 않도록 설계되었습니다.
세 가지 기본 규칙과, 이 규칙들이 메서드 시그니처에서 어떻게 상호작용하는지를 중심으로 설명합니다.
수명 개념에 익숙해지려는 중급 Rust 개발자에게 필수적인 문법 참고서입니다.
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
🔑 2. 핵심 개념 4가지
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
① Lifetime Parameter: 참조의 유효 범위를 명시하는 제네릭 매개변수입니다.
② Elision: 컴파일러가 규칙에 따라 수명을 자동으로 추론하여 생략을 허용하는 메커니즘입니다.
③ Input Lifetimes: 함수 매개변수에 포함된 참조의 수명들입니다.
④ Output Lifetimes: 함수 반환값에 포함된 참조의 수명들입니다.
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
📖 3. 주요 내용 상세
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
수명 생략은 함수와 메서드 시그니처에만 적용되며, impl 블록이나 타입 정의에는 적용되지 않습니다.
컴파일러는 세 가지 규칙을 순차적으로 적용하여 암묵적 수명을 결정합니다.
첫 번째 규칙은 입력 수명에 각각 고유한 암묵적 수명 매개변수를 할당합니다.
fn foo(x: &i32, y: &i32)는 fn foo<'a, 'b>(x: &'a i32, y: &'b i32)로 변환됩니다.
두 번째 규칙은 입력 수명 중 정확히 하나가 있을 때, 출력 수명에 동일한 수명을 할당합니다.
fn foo(x: &i32) -> &i32는 fn foo<'a>(x: &'a i32) -> &'a i32가 됩니다.
이는 참조를 입력받아 참조를 반환하는 함수에서 가장 흔한 패턴입니다.
세 번째 규칙은 메서드에만 적용되며, &self나 &mut self가 있을 때 출력 수명에 self의 수명을 할당합니다.
fn foo(&self, x: &i32) -> &i32는 fn foo<'a, 'b>(&'a self, x: &'b i32) -> &'a i32로 변환됩니다.
이 규칙 덕분에 대부분의 getter 메서드에서 수명을 생략할 수 있습니다.
규칙 적용 후에도 출력 수명을 결정할 수 없으면, 컴파일러는 에러를 발생시킵니다.
이 경우 개발자가 명시적으로 수명을 annotate해야 합니다.
수명 생략의 목적은 보일러플레이트를 줄이는 것이며, 안전성을 희생하지 않습니다.
컴파일러가 추론할 수 없는 복잡한 경우는 명시적 annotation이 더 명확하고 안전합니다.
또한 신규 개발자가 수명 생략에만 의존하면 낭부 메커니즘을 이해하기 어려우므로, 학습 단계에서는 명시적 annotation을 권장합니다.
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
🛠 4. 실전 활용
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
간단한 getter나 문자열 슬라이스 함수에서는 수명을 생략해 코드를 간결하게 유지합니다.
여러 입력 참조 중 하나를 반환하거나, 반환값이 입력과 다른 수명을 가질 때는 명시적으로 annotate합니다.
복잡한 구조체와 트레이트 객체에 수명을 다룰 때는 반드시 명시적 선언을 사용합니다.
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
✅ 5. 정리
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
수명 생략은 Rust 코드의 가독성을 크게 향상시키는 문법 설탕입니다.
세 가지 규칙을 이해하면 컴파일러가 어떤 결정을 내리는지 예측할 수 있습니다.
복잡한 시그니처에서는 생략보다 명시적 annotation이 의도 전달과 안전성에 유리합니다.
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
🔗 출처 링크
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
원문: https://doc.rust-lang.org/reference/lifetime-elision.html
Rust Book Lifetimes: https://doc.rust-lang.org/book/ch10-03-lifetime-syntax.html
#Rust #Lifetime #Elision #BorrowChecker #Reference #Syntax #번역

오뉴노노 님의 최근 댓글
ㅋㅋㅋㅋㅋ 2019 01.14 잘 읽었습니다 2018 12.30 포인트가 없어서 아직 시작을 못하고있는데요! 글은 잘 읽었습니다! 포인트 쌓고 도전할거에요 2018 12.30