반응형
Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | ||||||
2 | 3 | 4 | 5 | 6 | 7 | 8 |
9 | 10 | 11 | 12 | 13 | 14 | 15 |
16 | 17 | 18 | 19 | 20 | 21 | 22 |
23 | 24 | 25 | 26 | 27 | 28 |
Tags
- 애플 달팽이
- for
- PKI
- Python 강좌
- did
- 주말농장
- rust 강좌
- 기본문법
- Tendermint
- MSSQL
- 물생활
- 체리새우
- 텐더민트
- 가재
- MSA
- rust
- RSA
- 조건문
- 분산 신원
- rust 소개
- golang 강좌
- 치비
- 무화과
- Feign
- 쌈채소
- 분산 식별자
- 구피
- 카디날
- Config server
- 반복문
Archives
- Today
- Total
comnic's Dev&Life
[Rust] 7. 소유권과 대여 본문
반응형
7. 소유권과 대여
Rust의 핵심 개념 중 하나는 소유권(Ownership) 시스템입니다. 이는 메모리 안전성과 경합 상태를 방지하는 기술적인 도구로 사용됩니다.
7. 1 소유권 시스템 소개
- Rust에서 모든 값은 변수에 소유권(ownership)을 가지고 있습니다. 한 번에 하나의 변수만이 해당 값의 소유권을 갖을 수 있습니다.
- 소유권은 변수가 스코프 밖으로 벗어날 때 해당 값이 메모리에서 해제되는 것을 의미합니다.
예제:
fn main() {
let s1 = String::from("Hello"); // s1이 String의 소유권을 가짐
let s2 = s1; // s2가 소유권을 가져감, s1은 더 이상 유효하지 않음
// println!("{}", s1); // 컴파일 에러! s1은 더 이상 사용할 수 없음
println!("{}", s2); // s2는 여전히 유효
}
7. 2 빌림과 참조
- 소유권을 넘기지 않고도 데이터에 접근할 수 있도록 빌림(borrowing)과 참조(reference)를 사용할 수 있습니다.
- 빌림은 다른 코드에게 데이터의 일부분에 임시로 접근할 수 있는 권한을 부여합니다.
예제:
fn calculate_length(s: &String) -> usize {
s.len()
}
fn main() {
let s1 = String::from("Hello");
let len = calculate_length(&s1); // s1에 대한 참조를 전달
println!("길이: {}", len);
}
7. 3 라이프타임
- 라이프타임(lifetime)은 참조자의 유효 범위를 나타냅니다. Rust는 참조자의 유효성을 검증하기 위해 라이프타임을 사용합니다.
- 'a와 같이 작성되며, 함수 시그니처에서 표현됩니다.
예제:
// 라이프타임 'a를 갖는 함수
fn longest<'a>(s1: &'a str, s2: &'a str) -> &'a str {
if s1.len() > s2.len() {
s1
} else {
s2
}
}
fn main() {
let s1 = String::from("Hello");
let result;
{
let s2 = String::from("Rust");
result = longest(&s1, &s2); // s1, s2 중 더 긴 문자열의 참조를 result에 저장
}
println!("가장 긴 문자열: {}", result); // s2의 라이프타임이 끝났으므로 사용 불가능
}
이러한 예제를 통해 Rust의 소유권 시스템, 빌림, 참조, 그리고 라이프타임이 어떻게 동작하는지를 이해할 수 있습니다.
반응형
'Rust' 카테고리의 다른 글
[Rust] 9. 생성자와 소멸자, RAII 개념 (1) | 2023.12.07 |
---|---|
[Rust] 8. 패턴 매칭(Match)과 매치 구조체(Match Struct) (2) | 2023.12.06 |
[Rust] 6. 구조체와 열거형 (1) | 2023.12.05 |
[Rust] 5. 함수, 모듈, 패키지 (1) | 2023.12.03 |
[Rust] vs-code에서 rust 디버깅 하기 (2) | 2023.12.03 |
Comments