본문 바로가기

개발71

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.
Rust 기본, OBRM vs RAII Rust 기본 : 소유권 기반 리소스 관리 (OBRM : Ownership Based Resource Management) Rust는 리소스를 컴파일러가 관리한다. (OBRM : Ownership Based Resource Management.)C++은 라이브러리로 패턴을 제공한다. (RAII : Resource Acquisition Is Initialization.) Rust Box & Rc 스마트 포인터struct Car {}// Box : 힙 메모리의 ownership 전달 (=RAII 패턴 C++ unique_ptr)let car = Box::new(Car {});let car2 = car; // 레퍼런스 카운트가 증가하고 같은 힙 메모리를 가리킨다. (=RAII 패턴 C++ shared_.. 2024. 7. 6.
Rust 기본, 주석 Comment. Rust 기본 : 주석 Comment. 러스트에서 사용하는 주석. // 이것은 라인 주석입니다. /* * 이것은 블록 주석입니다. */ 2024. 7. 6.
Rust 기본, 제어 흐름 Control Flow. (if else, loop, while, for) Rust 기본 : 제어 흐름 Control Flow. (if else, loop, while, for) if ~ else if ~ elseif 문은 조건을 평가하여 true 일 때만 코드 블록을 실행합니다.else if 문을 사용하여 여러 조건을 체크할 수 있습니다.else 브랜치는 모든 조건 체크가 실패했을 때 실행하는 코드 블록을 지정합니다.let a = 5;if a > 5 { println!("a는 5 보다 크다.");} else if a > 3 { println!("a는 3 보다 크다.");} else { // a 5 { 1 } else { -1 }; loop조건 없이 무한 반복하는 루프를 생성합니다.break : 루프 탈출.continue : 다음 반복으로 넘어감.break valu.. 2024. 7. 6.