Rust 여행 1차시 - 여행계획

포비·2024년 12월 3일

알아보자

목록 보기
4/111
post-thumbnail

러스트가 왜 강력한지 이해하려면 기본 개념러스트의 특성을 알아야 합니다. 러스트는 안전성, 성능, 동시성 등에서 뛰어난 특징을 가지고 있어 많은 사람들이 선호하는 언어입니다. 이제 기본 개념과 함께 러스트의 강력한 특성들을 함께 살펴볼겠습니다.

1. 러스트의 핵심 개념

러스트의 가장 중요한 개념은 소유권(Ownership), 빌림(Borrowing), 라이프타임(Lifetime)입니다. 이 개념들은 러스트가 메모리 안전성을 보장하는 핵심적인 방식입니다.

1.1 소유권(Ownership)

  • 러스트의 소유권 시스템은 메모리 안전성을 보장하면서 자동 메모리 관리를 제공하는 중요한 개념입니다.
  • 변수에 대한 소유권이 한 번에 하나만 존재하고, 이를 통해 메모리에서 중복 해제(duplicated memory deallocation)를 방지합니다. 예를 들어:
    let s1 = String::from("Hello");
    let s2 = s1;  // s1의 소유권이 s2로 이동, s1은 더 이상 사용할 수 없음.
    
  • 소유권이 이동할 때, 해당 값에 대한 메모리는 자동으로 관리됩니다. 이로 인해 메모리 관리가 안전하고 효율적입니다.

1.2 빌림(Borrowing)

  • 빌림은 값에 대한 소유권을 넘기지 않고 다른 변수에서 해당 값을 참조하게 하는 개념입니다.
  • *불변 참조(Immutable Borrow)가변 참조(Mutable Borrow)**가 있습니다.
    • 불변 참조는 여러 번 할 수 있지만, 가변 참조는 동시에 하나만 존재할 수 있습니다.

      예시:

      let s1 = String::from("Hello");
      let s2 = &s1;  // 불변 참조
      let s3 = &s1;  // 또 다른 불변 참조
      // let s4 = &mut s1; // 오류 발생: 가변 참조는 동시에 여러 번 존재할 수 없음
      

### 1.3 **라이프타임(Lifetime)**
  • 라이프타임은 참조가 유효한 기간을 나타내며, 참조가 만료된 후에 접근하면 컴파일러가 오류를 발생시켜 메모리 안전을 보장합니다.
  • 라이프타임을 명시적으로 지정하는 경우도 있지만, 대부분의 경우 컴파일러가 이를 자동으로 추론합니다. 예시:
    fn longest<'a>(s1: &'a str, s2: &'a str) -> &'a str {
        if s1.len() > s2.len() {
            s1
        } else {
            s2
        }
    }
    


### 2. **러스트가 강력한 이유**

러스트는 다음과 같은 특성들 덕분에 강력하고 안전한 프로그래밍 언어로 평가받고 있습니다.

2.1 메모리 안전성

  • *소유권(Ownership)빌림(Borrowing) 시스템 덕분에, 러스트는 수동 메모리 관리 없이** 메모리 안전성을 보장합니다.
  • 예를 들어, Null Pointer Dereferencing, Double Free, Use After Free와 같은 메모리 오류를 방지할 수 있습니다.
  • 컴파일 시에 오류를 검출하여, 실행 중에 발생할 수 있는 메모리 오류를 미리 예방합니다.

2.2 성능

  • 러스트는 C++와 유사한 제로 코스트 추상화(Zero-Cost Abstraction) 원칙을 따릅니다. 즉, 러스트는 고수준의 기능을 제공하면서도 성능 면에서는 C와 비슷한 수준의 효율성을 유지할 수 있습니다.
  • 스마트 포인터와 같은 고급 기능이 제공되지만, 이는 성능에 영향을 주지 않도록 설계되었습니다.

2.3 동시성(Concurrency)

  • 러스트는 동시성(Concurrency)을 안전하게 다룰 수 있는 도구를 제공합니다.
  • *채널(Channels)을 사용해 스레드 간에 안전하게 데이터를 전송하거나, 멀티스레딩(Multi-threading)**을 손쉽게 사용할 수 있습니다.
  • 러스트의 소유권빌림 시스템 덕분에, 데이터 경쟁(Data Race)을 예방하고 안전한 동시성 프로그래밍을 할 수 있습니다.

2.4 고급 기능들

  • 러스트는 패턴 매칭(Match), 트레잇(Trait), 구조체(Struct), 열거형(Enum) 등 고급 기능을 지원하여 복잡한 문제를 간결하고 안전하게 해결할 수 있습니다.
  • 예를 들어, 열거형(Enum)을 사용해 다양한 상태나 종류를 다룰 수 있고, 패턴 매칭을 통해 이를 쉽게 처리할 수 있습니다.
profile
무엇이든 필요한 것을 합니다. https://mint-middle-1e5.notion.site/2b7655e8316980ad9422d96a6f3947de

0개의 댓글