본문 바로가기

개발61

Rust 기본 : 특성 객체 (Trait Object) Rust 기본 : 특성 객체 (Trait Object) 러스트에서 특성 객체(trait object)는 특정 트레잇을 구현한 모든 타입의 인스턴스를 동적으로 처리할 수 있습니다. 이런 동적 처리(dynamic dispatch)는 런타임에 어떤 타입으로 결정된 메서드가 호출될지 결정하므로 해당 트레잇을 지원하는 다양한 타입(struct, enum)을 동일한 방식으로 처리할 때 사용합니다. 객체 생성 함수 - 정적 처리(static dispatch)   : create_hynix_memory() -> impl Compatible특성 객체를 impl Compatible 방법으로 트레잇  리턴할 수 있습니다.컴파일 시간에 호출 함수를 결정하기 때문에 런타임 성능이 좋습니다.  - 동적 처리(dynamic dis.. 2024. 9. 25.
Rust 기본 : 상위 특성 (Supertraits) Rust 기본 : 상위 특성 (Supertraits) Rust는 데이터와 행위를 분리하도록 설계되어 있습니다. 데이터는 구조체(struct)와 열거형(enum)으로 정의하고,행위는 트레잇(trait)을 통해 정의합니다.(유연성과 안전성 제공)Supertraits를 사용하는 것은 트레잇간의 관계를 정의하고, 트레잇을 구현할 때 필요한 기본 기능을 강제하는 방법입니다. (코드의 명확성과 유지보수성을 향상) 결국 Supertraits은 기능 확장의 순서를 잡아줍니다.B가 A를 supertrait으로 가지면, B를 구현하기 전에 A를 구현해야 합니다. 의존이냐 확장이냐. - B가 A의 기능에 의존 - A의 기능을 B로 확장trait A { fn do_something_a(&self);}// B:A - B .. 2024. 9. 19.
Rust 기본 : 특성 제약 (Traits Bounds) Rust 기본 : 특성 제약 (Traits Bounds) 러스트에서 트레잇 바운드는,구현하는 시점의 타입에 제한을 두고자 할 때 사용합니다.(특정 트레잇을 구현하는 타입만을 허용하는 제네릭 타입에 대한 제약) 예를 들어 개나 고양이 객체를 입력 받아서 빨간색으로 염색하는 함수를 만들고 싶습니다.이를 위해 'object'라는 이름의 입력 매개변수를 받는데, 객체가 'Animal' 트레잇을 구현했다면 어떤 타입이든 입력 매개변수로 사용 가능합니다.  트레잇 바운드를 지정하는 세 가지 방법이 있습니다.trait Animal { fn make_sound(&self); fn given_name(&self) -> String;} 1. (object: &T)첫 번째 방법은 제네릭 타입을 정의한 후 콜론을 .. 2024. 9. 12.
Rust 기본 : 특성 (Traits) Rust 기본 : 특성 (Traits) 러스트는 상속을 지원하지 않습니다.대신 함수를 공유하고 인터페이스를 제공하기 위해 트레잇(trait)를 사용합니다.이는 다른 언어의 인터페이스와 유사합니다. 트레잇은 타입의 행동을 추상화하고 규정하는 데 사용합니다.이를 통해 코드 유연성, 재사용성, 모듈성을 높일 수 있습니다. 트레잇(trait) 선언하기.1. 공통 특징 트레잇 'Animal' 정의.동물이 공통적으로 가질 수 있는 특징을 트레잇으로 정의합니다.trait Animal { fn make_sound(&self); fn given_name(&self) -> String;} 2. 행동 중심 트레잇 'Playful' 정의.trait Playful { fn play(&self) { .. 2024. 9. 7.
Rust 기본 : 일반화 (Generics) Rust 기본 : 일반화 (Generics) 러스트(Rust)의 제네릭(Generics)은 다양한 데이터 타입에 대해 코드 사용 유연성을 높이고 코드 반복 구현을 줄여줍니다. 제네릭을 사용하면 컴파일 시에 구체적인 타입으로 대체될 제네릭 타입을 가진 구조체, 열거형, 함수를 정의할 수 있습니다. 1. 정의 (Define)구조체 이름 뒤에 임의의 타입을 나타내는 를 추가하여 선언한다.struct Message { id: String, payload: T,} 2. 구현 (Implementation)impl : 구현부에서 제네릭 타입을 사용한다.Message : 구현 대상은 Message 제네릭 타입이다.impl Message { fn new(id: String, payload: T) -> S.. 2024. 9. 3.
Rust 기본 : 벡터 (Vector) Rust 기본 : 벡터 (Vector) 러스트에서 제공하는 Vec타입은 동적 배열이다. - 동적으로 크기 조정 가능하며 Vec는 T 타입으로 고정되어 타입 안전하다. - 0부터 시작하는 인덱스로 접근 가능하다. ex) v[0] - 반복자(iterator)와 for 루프를 통해 각 요소에 접근할 수 있다. Vector 생성 방법 1 : Vec::new()벡터는 동일한 타입 요소를 가지는 동적 배열이다. 그러나 배열과 달리 힙에 할당된다.fn main() { // 빈 벡터 생성 let v: Vec = Vec::new(); let mut v = Vec::new(); // 생성한 스트링 소유권은 vector로 이동한다. // -> vector가 삭제될 때 내부 모든 스트링 소유.. 2024. 8. 26.
Rust 기본 : 결과 열거형 (Result enum) Rust 기본 : 결과 열거형 (Result enum) Rust에서 유효한 값을 반환하거나 에러 값을 반환하려면Result enum을 사용할 수 있습니다.enum Result { Ok(T), Err(E),}Result enum에는 두 가지 변형이 있습니다. 하나는 일반적인 값을 포함하는 Ok 변형이고, 다른 하나는 에러 값을 가지는 Err 변형입니다.Result enum과 그 변형들은 std::prelude에 있습니다. std::prelude는 Rust가 모든 Rust 프로그램에 자동으로 가져오는 것들의 목록입니다.따라서 추가 코드 없이도 이들을 사용할 수 있습니다.std::preludehttps://doc.rust-lang.org/std/prelude/ std::prelude - Rust§T.. 2024. 8. 21.
Rust 기본, 옵션 열거형 (Option enum) Rust 기본 : 옵션 열거형 (Option enum) Rust에서 유효한 값을 반환하거나 아무 값도 반환하지 않으려면 Option enum을 사용할 수 있습니다.enum Option { None, Some(T),}Option enum에는 두 가지 변형이 있습니다. 하나는 일반적인 값을 포함하는 Some 변형이고, 다른 하나는 None 변형입니다.Option enum과 그 변형들은 std::prelude에 있습니다. std::prelude는 Rust가 모든 Rust 프로그램에 자동으로 가져오는 것들의 목록입니다.따라서 추가 코드 없이도 이들을 사용할 수 있습니다.std::preludehttps://doc.rust-lang.org/std/prelude/ std::prelude - Rust§The.. 2024. 8. 17.
Rust 기본, 패턴 매칭 표현식 (Match expression) Rust 기본, 패턴 매칭 표현식 (Match expression) Rust match 표현식은 값의 패턴을 매칭하여 조건에 따라 코드를 실행하는 강력한 제어 흐름 구조입니다.이는 다른 프로그래밍 언어의 switch-case 구문과 비슷하지만,더 유연하고 강력한 기능을 제공합니다.  값을 일련의 패턴과 비교하여 어떤 코드 경로를 실행할지 결정할 수 있습니다.또한 값에 대한 모든 패턴을 제시해야합니다.부족할 경우 마지막에 모든 경우에 해당하는 '_' 패턴을 사용합니다.fn main() { let age = 5; // 매치 블록 내부에는 패턴과 일치할 경우 실행할 코드로 구성된 match arms가 나열된다. // 패턴은 리터럴 값, 변수 이름, 와일드 카드 등이 될 수 있습니다. .. 2024. 8. 13.