학습
Rust 기본 문법
Rust 기본 문법 — 초급
Rust 기본 문법
1. 도입 (왜 배워야 하는가)
Rust는 메모리 안전성과 성능을 동시에 제공하는 현대적인 시스템 프로그래밍 언어입니다. 특히, 안전하고 효율적인 소프트웨어를 개발하는 데 강력한 도구가 됩니다. Rust의 기본 문법을 이해하지 못하면, 코드 작성 시 오류가 발생하거나 효율성이 떨어지는 문제를 겪을 수 있습니다. 예를 들어, 메모리 관리가 필요한 상황에서 Rust의 소유권(ownership) 개념을 이해하지 못하면 불필요한 메모리 누수나 데이터 경합(race condition) 문제를 일으킬 수 있습니다. 따라서 기본 문법을 확실히 익히는 것이 매우 중요합니다.
2. 핵심 개념 설명
Rust의 기본 문법을 이해하기 위해 알아야 할 핵심 개념은 다음과 같습니다.
| 개념 | 설명 |
|---|---|
| 변수(Variables) | 값을 저장하는 메모리 공간. immutable과 mutable로 나눌 수 있음. |
| 데이터 타입(Data Types) | 값의 종류를 정의. 기본 데이터 타입으로는 정수, 부동소수점, 불리언, 문자열 등이 있음. |
| 제어 구조(Control Structures) | 조건문(if, match)과 반복문(for, while) 등 흐름 제어를 담당. |
이 개념들은 마치 요리의 기본 재료와 레시피입니다. 요리를 잘 하려면 재료의 성질과 조리 방법을 알아야 하듯이, 프로그래밍에서도 기본 문법을 잘 이해해야 합니다.
3. 기본 코드 예제
아래는 Rust에서 변수와 데이터 타입을 사용하는 기본 예제입니다.
fn main() {
let x: i32 = 5; // 정수형 변수 x를 선언하고 5로 초기화
let y: f64 = 3.14; // 부동소수점형 변수 y를 선언하고 3.14로 초기화
let is_active: bool = true; // 불리언형 변수 is_active를 선언하고 true로 초기화
let greeting: &str = "안녕하세요"; // 문자열형 변수 greeting을 선언하고 초기화
println!("x: {}, y: {}, is_active: {}, greeting: {}", x, y, is_active, greeting);
}
실행 결과
x: 5, y: 3.14, is_active: true, greeting: 안녕하세요
코드 한 줄씩 동작 설명
fn main() {- 프로그램의 진입점인 메인 함수를 정의합니다.let x: i32 = 5;- 32비트 정수형 변수 x를 선언하고 5로 초기화합니다.let y: f64 = 3.14;- 64비트 부동소수점형 변수 y를 선언하고 3.14로 초기화합니다.let is_active: bool = true;- 불리언형 변수 is_active를 선언하고 true로 초기화합니다.let greeting: &str = "안녕하세요";- 문자열형 변수 greeting을 선언하고 초기화합니다.println!(...)- 변수들의 값을 콘솔에 출력합니다.- 쇼핑몰에서 장바구니를 구현할 때: 사용자가 선택한 상품을 저장하기 위해 변수를 사용합니다.
- 간단한 계산기 기능 구현: 사용자로부터 입력받은 두 수를 더하는 프로그램을 작성할 수 있습니다.
- 변수의 스코프(Scope) 이해 부족:
- 데이터 타입 불일치:
- Rust의 기본 문법은 변수, 데이터 타입, 제어 구조 등으로 구성됩니다.
- Rust는 메모리 안전성을 제공하므로, 기본 문법을 잘 이해하면 안전하고 효율적인 코드를 작성할 수 있습니다.
- 다음에 학습하면 좋은 주제는 소유권(Ownership), 구조체(Structs), 열거형(Enums)입니다.
4. 실전 활용 예제
let cart_items: [&str; 3] = ["사과", "바나나", "오렌지"];
println!("장바구니에 담긴 상품: {:?}", cart_items);
use std::io;
fn main() {
let mut input = String::new();
println!("두 숫자를 입력하세요: ");
io::stdin().read_line(&mut input).expect("Failed to read line");
let numbers: Vec<i32> = input.trim().split_whitespace()
.map(|s| s.parse().unwrap())
.collect();
let sum = numbers[0] + numbers[1];
println!("두 숫자의 합: {}", sum);
}
5. 흔한 실수와 주의사항
- 잘못된 코드:
{
let x = 5;
}
println!("{}", x); // 오류 발생: x는 스코프 밖에 존재하지 않음
- 올바른 코드:
let x = 5;
{
println!("{}", x); // x는 이 스코프 내에 존재함
}
- 잘못된 코드:
let x: i32 = "5"; // 오류 발생: i32와 문자열 타입이 다름
- 올바른 코드:
let x: i32 = "5".parse().unwrap(); // 문자열을 정수로 변환