Rust Fundamentals
https://learn.microsoft.com/en-us/training/paths/rust-first-steps/
Rust 기초 문법 강의 목차
강의 소개
- Rust 언어에 대한 소개
- Rust의 주요 특징
Rust 개발 환경 구축
- Rust 설치 방법
- Rust 개발 툴 소개 (Cargo, rustup, rustc 등)
- 통합개발환경(IDE) 설정
변수와 데이터 타입
- 변수 선언과 초기화
- 데이터 타입
- 상수와 불변성
연산자와 표현식
- 산술 연산자
- 비교 연산자
- 논리 연산자
- 대입 연산자
- 비트 연산자
- 연산자 우선순위
제어문
- 조건문 (if, else, else if)
- 반복문 (loop, while, for)
- 패턴 매칭 (match)
함수
- 함수 정의 및 호출
- 매개변수와 반환 값
- 반환 및 에러 처리
모듈과 패키지
- 모듈 정의와 사용
- 패키지 생성 및 관리 (Cargo 활용)
구조체와 열거형
- 구조체 정의와 사용
- 열거형 정의와 사용
- 구조체 및 열거형 메소드
에러 처리
- 에러 처리 방법
- Option, Result 열거형
- unwrap, expect 메소드
- ? 연산자
제네릭과 트레이트
- 제네릭 데이터 타입
- 트레이트 정의 및 구현
- 제한된 제네릭과 트레이트 바운드
스마트 포인터
- 참조와 빌림
- Box, Rc, Arc, RefCell, Mutex 등의 스마트 포인터
- 런타임 빌림 검사
동시성과 병렬성
- 스레드 생성 및 관리
- 메시지 전달을 통한 동시성
- 동기화 기술 (Mutex, RwLock 등)
- 채널 사용하기
마무리 및 실전 프로젝트
- Rust로 작성된 오픈 소스 프로젝트 분석
- 실전 프로젝트 구현
Rust 강의 소개
이 강의에서는 Rust 프로그래밍 언어의 기초를 배우고, Rust의 주요 특징들을 살펴봅니다.
1. 강의 소개
Rust 언어에 대한 소개
Rust는 성능과 안정성, 그리고 메모리 안전성에 중점을 둔 시스템 프로그래밍 언어입니다. Rust는 C 계열 프로그래밍 언어로, 강력한 형식(강타입, Strongly Typed)의 언어입니다. 메모리 안전성을 제공하며, 가비지 수집기는 없습니다.
Rust의 주요 특징
- Memory Safety: Rust는 컴파일 시점에 메모리 안전성을 검사하여 런타임에 발생하는 메모리 관련 오류를 최소화합니다.
- Zero-Cost Abstractions: Rust는 고수준의 추상화를 제공하면서도, 성능 저하 없이 실행됩니다.
- Concurrency: Rust는 데드락을 방지하고 데이터 경쟁을 최소화하는 동시성 구현을 지원합니다.
2. Rust 공식 사이트
Rust의 공식 사이트는 다음과 같습니다.
Rust Playground
온라인에서 Rust 코드를 작성하고 실행할 수 있는 Rust Playground를 이용할 수 있습니다.
3. Rust 학습 자료
Rust 공식 문서 및 학습 자료는 다음과 같습니다.
4. Rust 버전
Rust의 주요 역사는 다음과 같습니다.
- 2010년: Mozilla 재단에서 공개
- 2015년: 버전 1.0 공개
- 2022년(현재): 1.65.0
이 강의를 통해 Rust 프로그래밍 언어의 기초를 습득하고, 실제 프로젝트에 적용할 수 있는 지식을 쌓아보겠습니다.
Rust 개발 환경 구축
이 섹션에서는 Rust 개발 환경을 구축하는 방법에 대해 설명합니다. Rust 설치 방법, 개발 툴 소개, 그리고 통합 개발 환경(IDE) 설정 방법을 살펴봅니다.
1. Rust 설치 방법
Rust는 모든 주요 운영 체제에서 사용할 수 있습니다. 설치 방법은 다음과 같습니다.
Windows
- https://www.rust-lang.org/tools/install에서 rustup-init.exe를 다운로드합니다.
- 다운로드한 파일을 실행하고 안내에 따라 설치를 진행합니다.
macOS 및 Linux
터미널을 열고 다음 명령을 입력하여 Rust를 설치합니다.
curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh
2. Rust 개발 툴 소개
Rust 개발에 필요한 주요 툴들은 다음과 같습니다.
- rustc: Rust 컴파일러입니다. 소스 코드를 컴파일하여 실행 파일로 변환합니다.
- rustup: Rust 버전 및 관련 도구들을 관리하는 툴입니다.
- Cargo: Rust 패키지 관리자로, 프로젝트 생성 및 의존성 관리를 담당합니다.
3. 통합개발환경(IDE) 설정
Rust 개발을 위한 주요 통합 개발 환경(IDE)은 다음과 같습니다.
- Visual Studio Code: Visual Studio Code에서 Rust를 사용하려면, Rust 및 Rust Analyzer 확장 프로그램을 설치합니다.
- IntelliJ IDEA: JetBrains에서 제공하는 IntelliJ IDEA에서 Rust를 사용하려면, IntelliJ Rust 플러그인을 설치합니다.
- Sublime Text: Sublime Text에서 Rust를 사용하려면, Rust Enhanced 패키지를 설치합니다.
이러한 방법으로 Rust 개발 환경을 구축할 수 있습니다. 설치 및 설정이 완료되면, Rust 프로젝트를 생성하고 코딩을 시작할 수 있습니다.
Cargo를 사용한 Rust Hello World 프로젝트
이 글에서는 Rust의 패키지 관리자인 Cargo를 사용하여 Hello World 프로젝트를 생성하고 실행하는 방법을 소개합니다.
Cargo 소개
Cargo는 Rust의 패키지 관리자로, 프로젝트 생성 및 의존성 관리를 담당합니다. .NET의 NuGet과 같은 개념입니다.
Cargo CLI 명령어
주요 Cargo 명령어들은 다음과 같습니다.
cargo new
: 새 Rust 프로젝트를 생성합니다.cargo build
: 프로젝트를 빌드합니다.cargo run
: 프로젝트를 실행합니다.cargo check
: 코드를 검사하고 오류를 찾습니다.cargo bench
: 벤치마크를 실행합니다.cargo clean
: 빌드 캐시를 제거합니다.
Hello World 프로젝트 생성 및 실행
- 새 프로젝트를 생성합니다.
cargo new hello_world
- 프로젝트 폴더로 이동합니다.
cd hello_world
- 프로젝트의
src/main.rs
파일에 Hello World 코드를 작성합니다.
fn main() {
println!("Hello, world!");
}
- 프로젝트를 실행합니다.
cargo run
- 실행 결과를 확인합니다.
Hello, world!
crates.io 사이트
crates.io는 Cargo의 공식 패키지 모음 사이트입니다. Rust 라이브러리 및 프레임워크를 검색하고 사용할 수 있습니다.
이러한 방법으로 Cargo를 사용하여 Rust 프로젝트를 생성하고 실행할 수 있습니다. 이 과정을 통해 Rust 프로그래밍에 대한 기본적인 이해를 얻을 수 있습니다.
01_05_rust update 명령을 사용하여 Rust 컴파일러 최신 버전으로 업데이트
01_03_깃헙에 Rust 프로그래밍 언어 강의 소스 모음 리포지토리 생성
01_04_Rust 예제 또는 프로젝트 생성에 대한 기본 원칙 미리 소개
Rust의 변수와 데이터 타입
이 섹션에서는 Rust에서의 변수 선언, 초기화, 데이터 타입, 상수 및 불변성에 대해 설명합니다.
1. 변수 선언과 초기화
Rust에서 변수는 let
키워드를 사용하여 선언하며, 초기화할 수 있습니다. 기본적으로 변수는 불변(immutable)입니다. 값을 변경하려면 mut
키워드를 사용하여 가변(mutable) 변수를 선언해야 합니다.
fn main() {
let x = 5; // 불변 변수
println!("The value of x is: {}", x);
let mut y = 5; // 가변 변수
println!("The value of y is: {}", y);
y = 6;
println!("The value of y is: {}", y);
}
2. 데이터 타입
Rust는 몇 가지 기본 데이터 타입을 제공합니다.
- 정수형(Integer):
i8
,i16
,i32
,i64
,i128
,u8
,u16
,u32
,u64
,u128
- 부동 소수점(Floating-Point):
f32
,f64
- 불리언(Boolean):
bool
- 문자(Character):
char
변수를 선언할 때 데이터 타입을 명시적으로 지정할 수 있습니다.
fn main() {
let x: i32 = 5;
let y: f64 = 3.14;
let is_true: bool = true;
let character: char = 'A';
}
3. 상수와 불변성
상수는 불변성을 갖는 값으로, 프로그램 내에서 변경할 수 없습니다. Rust에서 상수는 const
키워드를 사용하여 선언합니다. 상수는 항상 타입을 명시해야 하며, 상수 표현식만 할당할 수 있습니다.
const MAX_VALUE: u32 = 100_000;
fn main() {
println!("The maximum value is: {}", MAX_VALUE);
}
불변성은 변수가 한 번 할당된 후 값이 변경되지 않음을 의미합니다. Rust에서 기본적으로 모든 변수는 불변입니다. 이를 통해 컴파일 시간에 메모리 안전성을 높이고, 코드의 가독성을 향상시킬 수 있습니다.
이러한 내용을 통해 Rust에서 변수와 데이터 타입, 그리고 상수와 불변성에 대한 기본적인 이해를 얻을 수 있습니다.
변수
rust는 변수 선언시 snake case
표기법을 사용합니다. C#과 Java는 camel case
를 사용합니다.
let name: string = String::from("RedPlus");
let mut age: i32 = 21;
age = age + 1;
숫자
- i32
- i64
- i128
- f32
- f64
루프
while count <= 5 {
}
loop {
if cnt == 5 {
break; // continue;
}
}
Rust 테스트 코드
#[test]
fn test_demo() {
assert_eq!(3, 5);
}
cargo test
cargo bench
cargo clean
배열
let arr = [ 1, 2, 3, 4, 5 ];
let arr: [i32; 5] = [ 1, 2, 3, 4, 5 ];
함수
fn sum(num1: i32, num2: i32) -> i32) {
num1 + num2
}
Option
None
값이 없을 때
Some()
값이 있을 때
match 키워드
구조체
struc Person {
name: String,
age: i32,
isVegan: bool,
}
Rust 모듈
mod my_mod {
pub fn get_data() {}
}
fn main() {
my_mod::get_data();
}
제네릭
Option<T>
Option<i32>
튜플
let p = ("Name", 21, true);
패턴 매칭
match result {
Some(x) if x > 0 => println!("+"),
Some(x) => println!("-"),
Some(x)
_ => println!("버림")
}
match
키워드는 다른 프로그래밍 언어의 switch
키워드와 비슷합니다.
테스트
cargo test