본문 바로가기

개발/러스트 (Rust)27

Rust 기본, 열거형 (Enumerations) Rust 기본, 열거형 (Enumerations) 러스트에서 enum은 단순한 상수 집합 이상의 기능을 제공합니다.러스트의 enum은 각 변형(variant)이 데이터를 직접 포함할 수 있게 해주며 패턴 매칭 (match) 을 사용하여 이 데이터에 접근할 수 있습니다. 인스턴스 생성 시, 사용자는 이중 콜론('::') 문법을 사용하여 특정 변형을 명시적으로 선택하고, 필요한 데이터를 제공해야합니다.enum Message { Quit, Move { x: i32, y: i32 }, Write(String),}let msg = Message::Write(String::from("Hello")); // 인스턴스 생성 시, 필요한 데이터 제공.이 예에서 'Message::Write' 변형은 'St.. 2024. 8. 10.
Rust 기본, 구조체 (Struct) Tuple structs Rust 기본, 구조체 (Struct) Tuple structs 튜플(Tuple)과 튜플 구조체(Tuple structs) - 튜플 : 여러 타입을 하나의 데이터로 묶어 준다. 단, 튜플은 타입을 정의하지 않는다. - 튜플 구조체 : 데이터 타입이나 인자 개수 체크가 가능한 하나의 데이터 타입으로 묶어준다.fn main() { // 튜플(tuple) // 이 함수 저 함수 사이를 이동하다 보면 변수 이름이 바뀌면서, // 튜플 데이터가 어떤 의미였는지 알기 어려워진다. let rgb_color = (255, 106, 0); let cmyk_color = (0, 58, 100, 0); // 튜플 구조체(tuple structs) // 타입이나 인자 개수 체크 가능. .. 2024. 8. 6.
Rust 기본, 구조체 (Struct) Implementation blocks Rust 기본 : 구조체 (Struct) Implementation blocks 구현 블록 (Implementation blocks)구현 블록은 주어진 유형에 대한 기능을 구현합니다.주어진 유형에는 struct, enum, trait 이렇게 세가지가 있습니다. 그리고 주어진 유형에 대해, - 메서드(method) : 인스턴스 함수. - 연관 함수(associated function) : 인스턴스 없이 호출, C++의 정적 메서드 역할. - 특성 구현(trait implementation) : 특성(trait)을 통해 정의된 인터페이스를 실제 타입에서 구현. 여기서는 구조체에 대한 메서드와 연관 함수에 구현을 설명합니다.  메소드(method) - 첫번째 함수 인자를 self, &self, &mut sel.. 2024. 8. 1.
Rust 기본, 구조체 (Struct) Rust 기본 : 구조체 (Struct)구조체는 관련 데이터를 그룹화 할 수 있게 해줍니다. 구조체 정의struct User { name: String, age: u8}fn struct_definition() { let user = User { name: String::from("Tom Riddle"), age: 17u8, }; println!("User's name: {}", user.name); println!("User's age: {}", user.age);} 구조체 수정struct ShopItem { name: String, quantity: u32, in_stock: bool,}fn mutation_structs(.. 2024. 7. 24.
Rust 기본, to_string() vs to_owned() Rust 기본 : to_string() vs to_owned() .to_string() - .to_string() 메서드는 ToString 트레이트의 일부입니다. - 이 메서드는 보통 Display 트레이트를 구현한 모든 타입에 대해 사용할 수 있습니다.    Display 트레이트는 주로 사람이 읽을 수 있는 형태로 객체를 문자열로 변환할 때 사용됩니다. ToString 트레이트는 fmt::Display 트레이트를 구현하는 모든 타입에 자동으로 구현됩니다.fmt::Display 트레이트를 구현하면 표준 라이브러리에서 아래 코드가 작동하게 된다.T가 fmt:: Display 트레이트면 ToString 트레이트도 동작한다.trait ToString { fn to_string(&self) -> Stri.. 2024. 7. 20.
Rust 기본 : UTF-8 문자열 (Strings) Rust 기본 : UTF-8 문자열 (Strings) 러스트는 기본 문자열 타입으로 UTF-8을 사용합니다.UTF (Unicode Transformation Format) &str, 문자열 슬라이스 (주소, 길이) - &str은 문자열의 일부를 보거나 참조할 수 있지만, 내용을 변경할 수는 없습니다. - &str은 UTF-8로 인코딩된 바이트의 연속을 참조하는 슬라이스입니다. - 문자열 슬라이스는 실제 데이터를 소유하지 않고, 기존 데이터에 대한 참조만을 가집니다. String (주소, 길이, 용량) - String은 크기를 조정할 수 있으며, 내용을 수정하거나 추가할 수 있는 UTF-8로 인코딩된 문자열입니다. - String 타입은 Rust의 표준 라이브러리에 포함되어 있으며, 메모리 관리와 관련된 .. 2024. 7. 17.
Rust 기본, 슬라이스 (Slice) Rust 기본 : 슬라이스 (Slice)슬라이스(Slice)는 컬렉션 내 연속적인 요소들을 참조(Borrow)합니다.여기서 '연속적'이란 요소들이 서로 인접해 있다는 의미입니다. 일반적으로 컬렉션 전체가 아닌 일부분만을 참조하고 싶을 때 Slice를 사용합니다. 슬라이스는 컬렉션의 일부를 Borrow 한다. - 불변 슬라이스(&[T]): 데이터의 일부에 대한 읽기 전용 접근을 허용합니다. - 가변 슬라이스(&mut [T]): 데이터의 일부에 대한 읽기 및 쓰기 접근을 허용합니다. 가변 슬라이스는 단순히 기존 데이터의 일부분에 대한 접근을 변경 가능하게 만들어 주는 것이지, 컬렉션의 구조 자체를 변경하거나 메모리를 확장하지는 않습니다.  문자열 유형String - 확장 가능하며, 힙에 할당된 문자열 (UT.. 2024. 7. 14.
Rust 기본, 참조 (Borrow) Rust 기본 : 참조 (Borrow) Borrow는, 참조를 생성하는 것입니다. - 참조는 규칙이나 제한이 있는 포인터입니다. - 참조는 소유권을 가지지 않습니다."borrow"는 참조를 생성하고 그 참조를 통해 데이터를 안전하게 사용할 수 있도록 하는 Rust의 규칙과 메커니즘을 포함하는 더 포괄적인 용어로 이해할 수 있습니다. 그래서 단순히 "reference"라고 하는 것과는 조금 다른 측면이 있습니다. Borrow를 참조로 읽으면 혼동이 덜하다.특히 C++ 사용자의 경우, Borrow는 참조(reference)에 약간의 규칙이 있다고 생각하면 쉽다.참조(Borrow) 사용하는 이유? - 성능을 위해서. - 소유권이 필요하지 않거나 원하지 않을 때. 참조(Borrow) 규칙. 1. 어느 시점에서든.. 2024. 7. 9.
Rust 기본, 소유권 (Ownership) Rust 기본 : 소유권 (Ownership) 소유권이란,메모리 및 기타 자원을 관리하기 위한 전략이다.컴파일 시간에 체크하는 규칙들이 있다.규칙: 1. 러스트에서 각 값은 '소유자'라고 불리는 변수를 가집니다. 2. 한 번에 하나의 소유자만 있을 수 있습니다. 3. 소유자가 유효 범위를 벗어나면, 그 값은 삭제됩니다. 소유권이 해결하는 문제 1. 메모리/리소스 누수 문제. 2. 이중 해제 문제. 3. 해제 후 사용 문제. 변수에서의 소유권 이동.fn main() { // 규칙 1 : 러스트에서 각 값은 '소유자'라고 불리는 변수를 가진다. s1, s2, s3. let s1 = String::from("Rust"); // heap allocated string. // 규칙 2 : 한 번에.. 2024. 7. 6.