rust <'_> elided lifetime

agnusdei·2025년 2월 6일

<'_>의 의미

코드에서 <'_>익명 라이프타임(elided lifetime)을 의미합니다.
구체적으로 다음 부분을 보면:

fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result

여기서 <'_>std::fmt::Formatter의 라이프타임 매개변수(제네릭 라이프타임)를 자동으로 생략하는 방식입니다.


1. 라이프타임이 필요한 이유

std::fmt::Formatter는 내부적으로 특정 라이프타임을 가지므로, Rust는 명시적인 라이프타임을 요구합니다.
즉, Formatter가 어디까지 유효한지를 지정해야 합니다.

하지만 Rust 2018 이후부터는 라이프타임 생략(lifetime elision) 규칙이 적용되어,
컴파일러가 문맥상 올바른 라이프타임을 자동으로 추론해 줍니다.
그 결과, 아래처럼 _를 써서 간략하게 표현할 수 있습니다.


2. <'_>의 역할

<'_>컴파일러가 자동으로 유추한 라이프타임을 사용하겠다는 의미입니다.
즉, 명시적으로 라이프타임을 작성하지 않고, Rust가 알아서 라이프타임을 정하도록 하는 것입니다.

따라서 아래 두 코드는 동일합니다.

✅ 생략된 형태 (<'_> 사용)

impl std::fmt::Display for MyType {
    fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
        write!(f, "MyType({})", self.0)
    }
}

✅ 명시적인 라이프타임 사용 (<'a> 명시)

impl std::fmt::Display for MyType {
    fn fmt<'a>(&self, f: &mut std::fmt::Formatter<'a>) -> std::fmt::Result {
        write!(f, "MyType({})", self.0)
    }
}

하지만 일반적으로 <'_>을 사용하는 것이 가독성 면에서 더 좋습니다.


3. 정리

  • <'_>컴파일러가 라이프타임을 자동 추론하도록 하는 표기법
  • std::fmt::Formatter<'_>에서 라이프타임을 명시하지 않아도 Rust가 자동으로 유추
  • 명시적으로 <'a>를 쓸 수도 있지만, <'_>을 쓰는 것이 일반적

즉, <'_>라이프타임을 명시적으로 쓰기 귀찮을 때 사용하는 편리한 문법입니다. 🚀

profile
DevSecOps, Pentest, Cloud(OpenStack), Develop, Data Engineering, AI-Agent

0개의 댓글