Rust Fundamentals

  • 12 minutes to read

https://learn.microsoft.com/en-us/training/paths/rust-first-steps/

Rust 기초 문법 강의 목차

  1. 강의 소개

    • Rust 언어에 대한 소개
    • Rust의 주요 특징
  2. Rust 개발 환경 구축

    • Rust 설치 방법
    • Rust 개발 툴 소개 (Cargo, rustup, rustc 등)
    • 통합개발환경(IDE) 설정
  3. 변수와 데이터 타입

    • 변수 선언과 초기화
    • 데이터 타입
    • 상수와 불변성
  4. 연산자와 표현식

    • 산술 연산자
    • 비교 연산자
    • 논리 연산자
    • 대입 연산자
    • 비트 연산자
    • 연산자 우선순위
  5. 제어문

    • 조건문 (if, else, else if)
    • 반복문 (loop, while, for)
    • 패턴 매칭 (match)
  6. 함수

    • 함수 정의 및 호출
    • 매개변수와 반환 값
    • 반환 및 에러 처리
  7. 모듈과 패키지

    • 모듈 정의와 사용
    • 패키지 생성 및 관리 (Cargo 활용)
  8. 구조체와 열거형

    • 구조체 정의와 사용
    • 열거형 정의와 사용
    • 구조체 및 열거형 메소드
  9. 에러 처리

    • 에러 처리 방법
    • Option, Result 열거형
    • unwrap, expect 메소드
    • ? 연산자
  10. 제네릭과 트레이트

    • 제네릭 데이터 타입
    • 트레이트 정의 및 구현
    • 제한된 제네릭과 트레이트 바운드
  11. 스마트 포인터

    • 참조와 빌림
    • Box, Rc, Arc, RefCell, Mutex 등의 스마트 포인터
    • 런타임 빌림 검사
  12. 동시성과 병렬성

    • 스레드 생성 및 관리
    • 메시지 전달을 통한 동시성
    • 동기화 기술 (Mutex, RwLock 등)
    • 채널 사용하기
  13. 마무리 및 실전 프로젝트

    • 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

  1. https://www.rust-lang.org/tools/install에서 rustup-init.exe를 다운로드합니다.
  2. 다운로드한 파일을 실행하고 안내에 따라 설치를 진행합니다.

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를 사용하려면, RustRust 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 프로젝트 생성 및 실행

  1. 새 프로젝트를 생성합니다.
cargo new hello_world
  1. 프로젝트 폴더로 이동합니다.
cd hello_world
  1. 프로젝트의 src/main.rs 파일에 Hello World 코드를 작성합니다.
fn main() {
    println!("Hello, world!");
}
  1. 프로젝트를 실행합니다.
cargo run
  1. 실행 결과를 확인합니다.
Hello, world!

crates.io 사이트

crates.io는 Cargo의 공식 패키지 모음 사이트입니다. Rust 라이브러리 및 프레임워크를 검색하고 사용할 수 있습니다.

이러한 방법으로 Cargo를 사용하여 Rust 프로젝트를 생성하고 실행할 수 있습니다. 이 과정을 통해 Rust 프로그래밍에 대한 기본적인 이해를 얻을 수 있습니다.

01_05_rust update 명령을 사용하여 Rust 컴파일러 최신 버전으로 업데이트

https://youtu.be/43PRXMy_teM

01_03_깃헙에 Rust 프로그래밍 언어 강의 소스 모음 리포지토리 생성

https://youtu.be/YhLZ9jAbEbM

01_04_Rust 예제 또는 프로젝트 생성에 대한 기본 원칙 미리 소개

https://youtu.be/pbC0axT6PiY

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 

VisualAcademy Docs의 모든 콘텐츠, 이미지, 동영상의 저작권은 박용준에게 있습니다. 저작권법에 의해 보호를 받는 저작물이므로 무단 전재와 복제를 금합니다. 사이트의 콘텐츠를 복제하여 블로그, 웹사이트 등에 게시할 수 없습니다. 단, 링크와 SNS 공유, Youtube 동영상 공유는 허용합니다. www.VisualAcademy.com
박용준 강사의 모든 동영상 강의는 데브렉에서 독점으로 제공됩니다. www.devlec.com