본문 바로가기

러스트6

Rust 간단한 웹서버 HttpServer 올리기 제목 그대로 간단하게 Rust로 웹서버 올리기 - hello world! 찍어보기 프로젝트 생성 $ cargo new rust-actix-api Cargo.toml 에 crate 추가 [dependencies] actix-web = "3.3.2" main.rs 수정 use actix_web::{web, App, HttpResponse, HttpServer, Responder}; async fn index() -> impl Responder { HttpResponse::Ok().body("Hello world!") } async fn get_data(web::Path(id): web::Path) -> impl Responder { let data = format!("get_data {id}"); HttpR.. 2023. 4. 19.
Rust 의 await, Future, Poll 에 대해 Rust는 비동기 프로그래밍을 위해 async/await 문법을 제공합니다. async 함수는 비동기 코드 블록을 나타내며, await 키워드를 사용하여 비동기 호출을 기다리고 결과를 반환할 수 있습니다. Future는 Rust에서 비동기 작업을 표현하는 trait입니다. Future를 구현하는 타입은 작업이 완료될 때까지 실행을 일시 중지하고 결과를 제공할 수 있습니다. Future는 poll 메소드를 구현해야 합니다. 이 메소드는 작업이 아직 완료되지 않았거나 작업이 완료되었지만 결과가 아직 사용 가능하지 않은 경우 Poll::Pending을 반환하고, 작업이 완료되고 결과를 제공할 수 있는 경우 Poll::Ready를 반환합니다. 다음은 간단한 예시 코드입니다: use futures::Future;.. 2023. 3. 24.
Rust match match는 Rust에서 패턴 매칭을 수행하는 키워드입니다. 다른 언어에서는 switch와 유사한 기능을 수행합니다. 다른 언어의 switch문과 비교하여 Rust의 match문의 가장 큰 차이점은 각 분기(branch)마다 변수나 값에 대한 패턴을 지정할 수 있다는 것입니다. 이것은 Rust에서 매우 강력한 기능으로 여겨집니다. 다음은 Rust에서 match를 사용한 예제 코드입니다. let number = 5; match number { 0 => println!("Number is zero"), 1 => println!("Number is one"), 2..=10 => println!("Number is between two and ten"), _ => println!("Number is someth.. 2023. 3. 16.
Rust 매크로 macro_rules! Rust의 macro_rules! 매크로는 코드를 생성하는 Rust 코드의 일부입니다. 이 매크로를 사용하면 사용자 지정 매크로를 작성하여 Rust 코드의 작성과 유지 관리를 단순화할 수 있습니다. macro_rules! 매크로는 Rust 코드에서 기호 또는 패턴을 식별하고 이러한 패턴에 대해 매크로를 적용하는 방법을 지정합니다. 예를 들어, 이 매크로를 사용하여 새로운 함수를 생성할 수 있습니다. macro_rules! make_a_function { ($func_name: ident) => ( fn $func_name() { println!("Hello from {} function!", stringify!($func_name)); } ) } make_a_function!(my_function); f.. 2023. 3. 15.
Rust trait - 인터페이스?, 추상클래스? Rust에서 Trait은 다른 언어에서 인터페이스나 추상 클래스와 비슷한 역할을 합니다. Trait은 메서드와 관련된 동작을 정의하며, 구조체, 열거형, 또는 다른 Trait 등과 함께 사용될 수 있습니다. Trait을 사용하여 코드를 더 모듈화하고, 코드 재사용성을 높이고, 다형성을 제공할 수 있습니다. 다음은 간단한 예제입니다. 이 예제에서는 Trait을 사용하여 구조체가 지정된 Trait에 해당하는 메서드를 구현할 수 있도록합니다. trait Animal { fn name(&self) -> &'static str; fn make_sound(&self); } struct Dog { name: &'static str, } struct Cat { name: &'static str, } impl Anima.. 2023. 3. 14.
Rust 의 소유권(ownership)이란? Rust 언어의 소유권 시스템은 메모리 안전성과 동시성을 보장하기 위해 설계된 고유한 기능입니다. 이 시스템은 Rust 코드에서 객체의 소유권을 추적하여 런타임 오류인 "null pointer dereference"와 "dangling pointer"같은 일반적인 메모리 오류를 방지합니다. Rust에서 모든 객체는 변수에 바인딩되어 있으며, 각 변수는 그 객체의 소유자입니다. 이렇게 소유권이 지정된 객체는 다른 스코프로 전달될 때 소유권이 이전됩니다. 이를 "move"라고 부릅니다. 이렇게 소유권을 이전함으로써 객체의 수명을 추적하고, 객체에 대한 메모리 할당과 해제를 자동으로 처리할 수 있습니다. 또한, Rust에서는 불변 참조와 가변 참조를 구분합니다. 불변 참조는 객체의 소유권을 넘기지 않고도 객체.. 2023. 3. 13.