Box 와 Rc를 사용해 동적 메모리를 할당 받을 수 있다.
1. Box
- Box::new : 메모리 할당
- * : 메모리에 접근
Box 와 Rc를 사용해 동적 메모리를 할당 받을 수 있다.
1. Box
- Box::new : 메모리 할당
- * : 메모리에 접근
러스트(Rust)의 가장 핵심 개념
메모리 안전(Memory Safety)을 보장하기 위한 설계 철학
"러스트는 데이터에 대한 소유권 규칙을 통해 메모리를 자동으로 관리한다."
1. 값 이동은 오직 하나의 소유자(owner)만 가진다. | |
2. 소유자가 스코프를 벗어나면 데이터는 자동으로 drop(메모리 해제) 된다. | |
3. 데이터 이동(move)시 원래 소유자는 더 이상 데이터 사용 불가 |
Rust 기초 문법과 개념들을 정리
Rust는 정적 타입 언어로 컴파일 타임에 자료형이 결정됨.
종류 | 예시 | 설명 |
---|---|---|
정수형 | i32, u64 등 | 부호/크기 명시 |
실수형 | f32, f64 | 부동소수점 숫자 |
불린형 | bool | true / false |
문자형 | char | 유니코드 문자 |
문자열 | String, &str | 힙 메모리 or 리터럴 |
튜플 | (i32, f64, char) | 여러 타입 묶음 |
배열 | [i32; 3] | 고정 크기 배열 |
Rust는 기본적으로 변수는 불변(immutable)
let x = 10; // 불변 변수
let mut y = 20; // 가변 변수 (mut 키워드)
y = 30; // 가능
안전성을 위해 기본은 불변 → 필요할 때만 mut
사용 권장.
조건문 → if
, else if
, else
let score = 80;
if score >= 90 {
println!("A등급");
} else if score >= 80 {
println!("B등급");
} else {
println!("C등급");
}
반복 처리 구문 종류
문법 | 설명 |
---|---|
loop | 무한 반복 |
while | 조건 반복 |
for | 컬렉션 순회 |
for i in 1..=5 {
println!("{}", i);
}
함수 정의와 반환값
fn add(a: i32, b: i32) -> i32 {
a + b // 세미콜론 없으면 return
}
Rust는 명시적 타입 선언 권장
익명 함수 (람다식)
let sum = |a: i32, b: i32| -> i32 {
a + b
};
println!("{}", sum(3, 5));
클로저는 환경 변수 캡처 가능 (스코프 안 변수 사용 가능)
데이터 묶음 정의
struct User {
name: String,
age: u32,
}
let user = User {
name: String::from("홍길동"),
age: 30,
};
구조체를 이용해 객체지향 프로그래밍 스타일 가능
여러 값 중 하나를 표현
enum Color {
Red,
Green,
Blue,
}
let c = Color::Red;
매칭 처리 가능
match c {
Color::Red => println!("빨강"),
Color::Green => println!("초록"),
Color::Blue => println!("파랑"),
}
Rust는 "안전하고 빠르고 현대적인 시스템 프로그래밍 언어"
기본 규칙 : 불변, 명시적, 안전성 추구
익숙해질수록 개발 생산성도 올라간다!
1.러스트를 왜 배워야 하는가?
Rust - C/C++ 수준의 고성능을 제공하면서도 메모리 안전성을 보장하는 현대적인 시스템 프로그래밍 언어
자바나 C#처럼 런타임에 GC(Garbage Collection)를 사용하지 않고, 소유권(Ownership)과 빌림(Borrowing) 개념을 통해 메모리를 컴파일 타임에 안전하게 관리
러스트 특징
- 안전한 메모리 관리
- 철저한 오류 처리
- 쉽고 편한 비동기 프로그래밍
- 편리한 패키지 관리 도구
항목 | C / C++ | Java / C# | Rust |
---|---|---|---|
메모리 관리 | 수동 (malloc/free, new/delete) | 자동 (Garbage Collection) | 소유권(Ownership), 빌림(Borrowing), 라이프타임(Lifetime) |
실행 성능 | 매우 빠름 | 비교적 빠름 (GC 영향 있음) | 매우 빠름 (C/C++ 수준) |
안정성 | 낮음 (메모리 오류 발생 가능) | 높음 (런타임 예외 처리) | 매우 높음 (컴파일 타임에 대부분 검증) |
학습 난이도 | 낮음 ~ 높음 (C++ 복잡도 높음) | 낮음 | 높음 (소유권 개념 익숙해지기 어려움) |
개발 생산성 | 낮음 (많은 직접 관리) | 높음 (GC, 풍부한 라이브러리) | 보통 (엄격한 문법 제약) |
마지막으로 글 남긴게 작년 1월이라니~!
깃허브에 집중하느라 여기에 글 남기는 것을 깜박했다.
ai 시대가 아무리 발전해도, 개발자라면 꾸준한 공부가 답 아닐까?
지금은 러스트 공부 중인데 새로운 언어니깐
여기에 기록해서 까먹으면 내가 기억하기 용으로 써야겠다.
꾸준한 공부는 배신하지 않는다.