[Rust 공식문서 한국어 정리] 112. Rust 라이프타임 서브타이핑 가이드
[Rust 공식문서 한국어 정리] 112. Rust 라이프타임 서브타이핑 가이드
원문 제목: Subtyping and Variance
작성자: The Rust Project
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
📌 1. 서론 — 이 문서가 다루는 내용
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
Rust의 서브타이핑과 변성(variance) 개념을 상세히 다룹니다.
라이프타임의 서브타입 관계('a: 'b)가 의미하는 바를 학습합니다.
공변, 반변, 불변의 세 가지 변성 규칙과 그 적용 대상을 정리합니다.
서브타이핑이 함수 인자, 참조, 제네릭 타입에서 어떻게 작동하는지 설명합니다.
변성 분석이 메모리 안전성을 보장하는 원리를 다룹니다.
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
🔑 2. 핵심 개념 4가지
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
① 서브타이핑 — 'long이 'short의 서브타입(더 오래 살 수 있음)
② 공변(Covariant) — 서브타입 관계가 그대로 유지
③ 반변(Contravariant) — 서브타입 관계가 역전됨
④ 불변(Invariant) — 서브타입 관계가 무효화됨
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
📖 3. 주요 내용 상세
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
Rust에서 서브타이핑은 주로 라이프타임에서 발생합니다.
'a가 'b보다 길게 살면 'a는 'b의 서브타입입니다.
이를 'a: 'b로 표기하며 'a는 최소 'b만큼 살 수 있다고 읽습니다.
&'a T는 'a가 길수록 더 오래 참조할 수 있으므로 공변입니다.
공변이란 &'long T가 &'short T의 서브타입이 될 수 있음을 의미합니다.
&mut T는 불변입니다.
&mut 'long T를 &mut 'short T로 취급할 수 없습니다.
이는 가변 참조가 메모리 안전성을 위해 정확한 라이프타임을 유지해야 하기 때문입니다.
함수 포인터 fn(T) -> U에서 T는 반변, U는 공변입니다.
반변은 입력이 더 짧게 살아도 더 길게 살 수 있는 함수를 허용함을 의미합니다.
Box, Vec, Option는 공변입니다.
Cell, RefCell는 불변입니다.
Cell의 내부 가변성이 있으므로 라이프타임을 자유롭게 변경하면 안전성이 깨집니다.
*const T는 공변이고 *mut T는 불변입니다.
PhantomData를 사용하면 변성을 명시적으로 제어할 수 있습니다.
PhantomData<&'a ()>는 공변을 PhantomData는 반변을 부여합니다.
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
🛠 4. 실전 활용
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
&'a T를 &'b T로 사용할 때 공변 덕분에 더 짧은 라이프타임으로 대입 가능합니다.
&mut T는 불변이므로 라이프타임을 변경하여 대입하면 컴파일 오류가 발생합니다.
API 설계 시 PhantomData로 타입의 변성을 의도적으로 제어합니다.
라이프타임 관련 컴파일 오류를 분석할 때 변성 개념으로 이해합니다.
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
✅ 5. 정리
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
서브타이핑은 라이프타임에서 더 오래 살 수 있는 타입이 서브타입이 됩니다.
공변, 반변, 불변은 제네릭 타입이 서브타입 관계를 어떻게 상속하는지 결정합니다.
변성 규칙은 Rust의 메모리 안전성을 보장하는 핵심 메커니즘 중 하나입니다.
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
🔗 출처 링크
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
원문: https://doc.rust-lang.org/nomicon/subtyping.html
Rustonomicon: https://doc.rust-lang.org/nomicon/
#Rust #서브타이핑 #변성 #라이프타임 #번역

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