참조와 빌림 설명
참조와 빌림을 학습하여 코드의 여러 부분이 소유권을 가져가지 않고도 안전하게 데이터에 접근하도록 합니다.
참조와 빌림 설명은(는) CoddyKit의 무료 Learn Rust Coding 강의입니다. 이것은 3개 중 2번째 강의입니다. 아래에서 전체 강의를 무료로 읽을 수 있으며, 내장 코드 에디터와 24/7 AI 튜터와 함께 브라우저에서 직접 실습할 수 있습니다. 이 강의는 Learn Rust Coding 학습 경로의 일부이며, 진행 상황이 웹과 CoddyKit 앱에 동기화됩니다. Learn Rust Coding 강의에는 총 3개의 강의가 포함되어 있습니다.
참조란 무엇인가요?
Rust에서는 변수가 자신의 데이터를 소유합니다. 그렇다면 소유권을 넘기지 않고 코드의 다른 부분에서 해당 데이터를 확인하거나 변경하게 하려면 어떻게 해야 할까요?
바로 이때 참조를 사용합니다! 참조는 값에 대한 포인터와 비슷하지만, Rust 컴파일러가 엄격한 규칙을 적용합니다.
물건 자체를 소유하는 대신 창문을 통해 바라보는 것이라고 생각해 보세요.
첫 번째 참조
& 연산자를 사용해 참조를 만듭니다. 이 연산자는 값에 대한 비소유 포인터를 만듭니다. 실제로 어떻게 동작하는지 살펴보겠습니다.
fn print_length(s: &String) {
println!("The length is: {}", s.len());
}
fn main() {
let message = String::from("Hello, CoddyKit!");
print_length(&message); // Pass a reference
println!("Original message still here: {}", message);
}대여 이해하기
값에 대한 참조를 만들면 해당 값을 대여하는 것입니다. 소유자는 여전히 값을 소유하지만, 여러분은 일시적으로 값에 접근할 수 있습니다.
- 넘겨주지 않고 빌려주기: 대여한 데이터를 사용할 수 있습니다.
- 소유권 이전 없음: 원래 변수가 계속 데이터를 소유하며, 유효 범위를 벗어날 때 데이터를 삭제합니다.
- 안전 우선: Rust의 대여 규칙은 데이터 경합과 같은 일반적인 프로그래밍 오류를 방지합니다.
불변 대여: 읽기 전용 접근
Rust에서 참조는 기본적으로 불변입니다. 즉, 참조가 가리키는 데이터를 읽을 수는 있지만 변경할 수는 없습니다.
이는 핵심적인 안전 기능입니다! 코드의 여러 부분이 읽기 전용으로 접근하면 서로의 데이터에 실수로 간섭할 수 없습니다.
불변 대여 실습
여기서 calculate_sum 함수는 벡터에 대한 불변 참조를 받습니다. 요소를 읽을 수는 있지만 추가하거나 삭제할 수는 없습니다.
fn calculate_sum(numbers: &Vec<i32>) -> i32 {
let mut total = 0;
for num in numbers {
total += num;
}
total
}
fn main() {
let my_numbers = vec![10, 20, 30, 40];
let sum = calculate_sum(&my_numbers); // Immutable borrow
println!("The sum is: {}", sum);
println!("Original vector: {:?}", my_numbers);
}가변 대여: 데이터 변경하기
때로는 대여한 데이터를 수정해야 합니다. 이때 &mut로 표시되는 가변 참조를 사용합니다.
가변 참조에는 중요한 규칙이 있습니다. 특정 데이터에 대한 가변 참조는 한 번에 하나만 가질 수 있습니다. 이를 통해 데이터 경합을 방지하고 안전성을 보장합니다.
&mut로 데이터 수정하기
add_suffix 함수는 String에 대한 가변 참조를 받습니다. 따라서 원래 String을 직접 수정할 수 있습니다.
fn add_suffix(text: &mut String) {
text.push_str(" (modified)");
}
fn main() {
let mut my_string = String::from("Original text");
add_suffix(&mut my_string); // Mutable borrow
println!("Modified string: {}", my_string);
}대여의 핵심 규칙
Rust의 컴파일러는 메모리 안전성을 보장하기 위해 컴파일 시점에 다음 규칙을 적용합니다:
- 한 번에 데이터의 한 부분에 대해 가변 참조 하나만 가질 수 있습니다.
- OR, 한 번에 임의의 개수의 불변 참조를 가질 수 있습니다.
- 활성 상태인 불변 참조가 있는 동안에는 가변 참조를 가질 수 없습니다.
- 참조는 항상 유효해야 합니다(참조가 가리키는 데이터보다 오래 존재할 수 없습니다).
이러한 규칙은 데이터 경합을 방지하고 프로그램이 안전하며 예측 가능하도록 합니다.
충돌하는 대여
이 코드는 my_value에 대해 불변 참조와 가변 참조를 동시에 만들려고 하므로 Rust의 대여 규칙을 위반합니다. 컴파일되지 않습니다.
직접 실행하여 컴파일러 오류를 확인해 보세요!
fn main() {
let mut my_value = 100;
let r1 = &my_value; // Immutable reference
let r2 = &mut my_value; // Mutable reference (problem here!)
println!("r1: {}", r1);
// println!("r2: {}", r2); // This line would also cause an error if uncommented
}이해도 확인
다음 Rust 코드 조각을 살펴보세요:
fn process_data(data: &mut Vec<i32>) {
data.push(4);
}
fn main() {
let mut numbers = vec![1, 2, 3];
let first_ref = &numbers[0]; // Line A
process_data(&mut numbers); // Line B
println!("First element: {}", first_ref); // Line C
}Rust의 대여 규칙으로 인해 어느 줄에서 컴파일 시점 오류가 발생합니까?
복습: 참조와 대여
잘하셨습니다! Rust의 참조와 대여에 관한 기본 개념을 익혔습니다:
- 참조(
&)를 사용하면 소유권을 가져오지 않고 데이터에 접근할 수 있습니다. - 대여는 참조를 만들어 데이터에 대한 접근 권한을 빌려주는 행위입니다.
- 불변 참조(
&)는 읽기 전용 접근을 제공합니다. - 가변 참조(
&mut)는 읽기 및 쓰기 접근을 제공합니다. - Rust의 엄격한 대여 규칙(가변 참조 하나 OR 불변 참조 여러 개)은 데이터 경합을 방지하고 컴파일 시점에 메모리 안전성을 보장합니다.
이러한 개념은 안전하고 효율적인 Rust 코드를 작성하는 데 매우 중요합니다!
자주 묻는 질문
“참조와 빌림 설명” 강의는 무료인가요?
네 — “참조와 빌림 설명” 전체 내용을 이 웹사이트에서 무료로 읽을 수 있습니다. 인터랙티브하게 실습하려면(내장 코드 에디터와 24/7 AI 튜터), CoddyKit PRO로 업그레이드하면 Learn Rust Coding 강의 전체를 잠금 해제할 수 있습니다. Learn Rust Coding 강의에는 총 3개의 강의가 포함되어 있습니다.
“참조와 빌림 설명”에서 뭘 배우나요?
참조와 빌림을 학습하여 코드의 여러 부분이 소유권을 가져가지 않고도 안전하게 데이터에 접근하도록 합니다. 브라우저에서 직접 실행하는 실습 코드로 Learn Rust Coding을(를) 배우며, 24/7 AI 튜터가 강의를 진행하면서 질문에 답변해줍니다.
Learn Rust Coding을(를) 시작하는 데 경험이 필요한가요?
사전 경험은 필요하지 않습니다. CoddyKit의 Learn Rust Coding은(는) 초급자부터 고급 학습자까지를 위해 구성되어 있으므로, 여기서 시작하거나 처음부터 시작할 수 있으며 자신의 속도대로 진행할 수 있습니다. 이것은 3개 중 2번째 강의입니다.
“참조와 빌림 설명” 강의는 얼마나 걸리나요?
대부분의 CoddyKit 강의는 약 5~10분이 소요됩니다. 각 강의는 간결하고 인터랙티브하여 꾸준한 진행이 가능하며, 웹과 앱에서 중단한 부분부터 바로 시작할 수 있습니다.
이 Learn Rust Coding 강의에서 코드를 작성하고 실행할 수 있나요?
네. 모든 Learn Rust Coding 강의에는 내장 코드 에디터가 포함되어 있으므로, 브라우저에서 바로 실제 코드를 작성하고 실행한 후 즉시 AI 피드백을 받을 수 있습니다 — 로컬 설정이 필요 없습니다.
이 강의의 모든 강의
- Rust의 소유권 모델 이해하기
- 참조와 빌림 설명
- 안전한 참조를 위한 수명