Programming Language/Rust(19)
-
[러스트/Rust] 스마트 포인터(Smart Pointer), 박스(Box<T>) 개념 정리
■ 스마트 포인터 스마트 포인터는 메모리의 주소 값을 갖는 변수로 알고 있는 포인터처럼 동작합니다. 또한 빌리기만 하는 참조자와 달리 가리키고 있는 데이터를 소유하며, 추가적인 메타데이터와 기능들을 가지고 있는 데이터 구조입니다. 스마트 포인터는 기본적으로 구조체(Struct) 형으로 정의하며, Deref(std::ops::Deref) 와 Drop(std::ops::Drop) 트레잇을 구현해야 합니다. Deref 트레잇은 스마트 포인터의 인스턴스가 참조자처럼 동작하도록하고, Drop 트레잇은 스마트 포인터의 인스턴스가 스코프 밖으로 벗어났을 때 스마트 포인터의 메모리와 소유권을 정리하고 원하는 로직을 커스터마이징 할 수 있도록 합니다. 자세한 사용 예시는 Box 와 동일한 스마트 포인터를 만들어보면서 설..
2022.05.30 -
[Rust/러스트] anyhow 라이브러리 정리
■ anyhow anyhow는 std::error::error 트레잇의 바운드 작업을 통해 에러를 처리하기 때문에 Rust 응용 프로그램에서 발생할 수 있는 관용적인 오류를 쉽게 처리할 수 있으며, 다양한 기능을 제공합니다. ◆ anyhow! anyhow 메크로는 인자로 &str, String, std::error::error 트레잇에서 취급하는 모든 에러 타입을 사용할 수 있습니다. 반환값은 anyhow::Error 타입입니다. use anyhow::{anyhow, Error}; // &str 사용 예시 fn anyhow_test() -> Result{ return Err(anyhow!("test error")); } // String 사용 예시 fn anyhow_test() -> Result{ ret..
2022.04.15 -
[Rust/러스트] 트레잇(trait) 정리
■ 트레잇 트레잇은 타입들이 공통적으로 갖는 동작에 대해 추상화하도록 해줍니다. 이는 Java의 Interface에서 추상화 함수를 정의함으로써 강제력을 제공하는것과 유사합니다. 트레잇을 제네릭 파라미터의 타입으로 사용하는 상황에서 트레잇 바운드를 통해 서로 다른 구조체에 연관성을 제공할 수 있습니다. ◆ 트레잇 구현 Animal 트레잇 타입으로 구현한 Dog는 추상화된 custom_bark 메소드와 구현된 common_bark 메소드 두가지 메소드를 갖습니다. custom_bark 메소드는 Dog 구현부(impl)에서 강제적으로 정의가 되어야 하지만, common_bark 메소드는 정의하지 않고 Animal 트레잇 타입으로 구현한 모든 구조체에서 사용할 수 있습니다. trait Animal{ // 선언..
2022.02.25 -
[Rust/러스트] 제네릭(Generic) 정리
■ 제네릭 제네릭은 컨셉의 복제를 효율적으로 다루기 위한 도구로서, 구체화된 타입이나 다른 속성들에 대하여 추상화된 대리인의 역할을 수행합니다. 제네릭은 함수, 구조체, 열거형, 메소드를 정의할 때 사용할 수 있습니다. ◆ 제네릭 함수 활용 제네릭을 함수에 활용함으로써 다양한 타입의 파라미터를 받아 작업을 수행할 수 있습니다. 예시) T는 [i32], [f32], [&str] 타입의 파라미터를 받고 있으며, 파라미터를 그대로 반환하는 show 함수를 통해 함수에서의 제네릭 활용법을 확인할 수 있습니다. fn show(data : T) -> T { data } fn main(){ println!("i32 data : {}", show(29)); println!("f32 data : {}", show(0.2..
2022.02.23 -
[Rust/러스트] 해쉬맵(HashMap) 다루기
■ 해쉬맵 HashMap은 키(key) 와 값(value)가 쌍으로 하는 데이터 구조를 갖고 있으며, 키와 값은 각각 동일한 타입으로 설정해야 한다. HashMap은 키를 이용하여 값을 조회할 수 있습니다. ◆ 해쉬맵 생성 해쉬맵을 생성하는 방법은 두가지입니다. 첫번째, HashMap 구조체의 new 함수를 활용한 생성 fn main(){ use std::collections::HashMap; // HashMap 생성 let mut hash_ages : HashMap = HashMap::new(); // 데이터 삽입 hash_ages.insert(String::from("Hyunmin Han"), 29); println!("HashMap : {:?}", hash_ages); } ▶ 출력 결과 HashMa..
2022.02.21 -
[Rust/러스트] 스트링 다루기
■ 스트링 스트링은 바이트의 컬렉션 및 바이트들을 텍스트로 통역할 때 유용한 기능을 제공하는 몇몇 메소드로 구현되어 있으며, 문자열 데이터를 갖습니다. ◆ 스트링 생성 스트링을 생성하는 방법은 세가지입니다. 첫번째, String 구조체의 new 함수를 활용한 생성 두번째, String 구조체의 from 함수를 활용한 생성 세번째, Display 트레잇이 구현된 모든 타입에서 to_string 메소드를 이용한 생성 fn main(){ // 공백 문자열 생성 let s1 = String::new(); // 공백 문자열 생성 let s1 = String::from(""); // 공백 문자열 생성 let s1 = "".to_string(); } ◆ 스트링 갱신 스트링을 갱신하는 방법은 네가지 입니다. 첫번째, ..
2022.02.21