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 | 29 | 30 | 31 |
Tags
- listcomprehension
- 저항
- result타입
- format_args!
- 채널
- closure
- 불변참조
- 정적타입
- 파이썬
- 클로저
- 스레드안전
- 빗각
- toml
- 러스트
- 마켓메이킹
- match
- fizz
- &args
- 지지
- 히코우즈쿠에
- 메모리
- 소유권
- concat!
- crates
- println!
- 가변변수
- 트레이딩플랫폼
- 시장조성
- 가변참조
- 러스트철학
Archives
- Today
- Total
unanimous0
[RUST 1-7] 참조 본문
- 참조
- 러스트에서 참조(Reference)는 소유권(Ownership) 시스템의 핵심 개념 중 하나로, 데이터의 소유권을 넘기지 않고 해당 데이터에 접근할 수 있게함
- 바로가기 링크나 심볼릭 링크같은 개념
- C언어에서의 포인터와 같은 개념. 즉, 값 그 자체가 아니라 값이 있는 곳을 나타내는 정보.
- 참조를 이용하면 어떤 함수 안에서 생성한 값을 다른 함수에 전달해 변경할 수 있음
- 참조의 기본 개념
- 불변 참조(&T):
데이터의 읽기 전용 접근을 허용. 여러 개의 불변 참조를 동시에 가질 수 있어, 같은 데이터를 여러 곳에서 읽을 때 안전하게 사용할 수 있음. - 가변 참조(&mut T):
데이터를 수정할 수 있는 접근을 제공. 단, 한 시점에 하나의 가변 참조만 존재할 수 있고, 다른 불변 참조와 동시에 사용할 수 없음. 이는 데이터 경쟁(race condition)을 방지하기 위한 규칙.
- 불변 참조(&T):
- 소유권과 빌림(Borrowing)
- 빌림:
참조를 사용하는 행위를 빌림(borrowing)이라고 합니다. 빌림은 소유권을 넘기지 않으면서 데이터를 활용할 수 있게함 - 안전성:
러스트의 Borrow Checker는 컴파일 타임에 참조의 유효성을 검사하여, 댕글링 포인터나 데이터 경쟁 같은 문제를 방지
- 빌림:
- 수명(Lifetimes)
- 수명 주기:
참조는 유효한 범위, 즉 수명(lifetime)을 가지며, 참조가 가리키는 데이터가 참조보다 먼저 소멸하면 안됨. 컴파일러는 수명 주기를 분석하여 안전하게 데이터에 접근할 수 있게함. - 명시적 수명:
대부분의 경우 러스트 컴파일러가 수명을 추론하지만, 복잡한 경우 개발자가 명시적으로 수명을 지정해줘야 할 때도 있음
- 수명 주기:
- 결론
- 러스트의 참조는 데이터의 소유권을 이전하지 않으면서도 안전하게 데이터를 공유할 수 있는 강력한 도구. 불변 참조와 가변 참조의 엄격한 규칙, 그리고 수명 검사 시스템은 런타임 에러 없이 효율적인 메모리 관리를 가능하게 하며, 안전한 병행성을 보장함.
fn main() {
let mut v = 10;
set_value(&mut v);
println!("v = {}", v);
}
// 인수의 값을 100으로 변경하는 함수
fn set_value(arg: &mut u32) {
*arg = 100;
}
/*
실행 결과
v = 100
*/
- 코드 설명
- set_value 함수를 보면 인수 arg의 값을 변경하기 위해 인수의 타입을 &mut u32로 지정하고 있음
- 여기서 인수 arg의 값을 100으로 변경하는데, 참조 값을 돌려줄 때 해당 값을 변경해야하므로 역참조(dereference)를 나타내는 "*"를 붙여 *arg=100 과 같이 기술함
- 함수의 인수를 변경하는데 참조(인수로 들어온 가변(참조)변수와 역참조)를 사용함
'RUST' 카테고리의 다른 글
[RUST 2-2] 난수를 이용한 미로 만들기 (Binary Tree) (0) | 2025.03.11 |
---|---|
[RUST 2-1] Cargo & Crates (1) | 2025.03.06 |
[RUST 1-6] 클로저(Closure)와 시저함수 (0) | 2025.03.01 |
[RUST 1-5] 러스트의 불변/가변 변수와 철학 (2) | 2025.03.01 |
[RUST 1-4] 구구단 만들기 & 클로져(Closure) (0) | 2025.03.01 |