본문 바로가기

전체 글225

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.
Rust 기본, 함수 (Functions) Rust 기본 : 함수 (Functions)함수는 fn 키워드를 사용하여 정의합니다. 그 다음에는 함수 이름이 오고, 괄호 안에는 매개변수가 위치합니다.main 함수는 매개변수가 없습니다.그리고 마지막으로 중괄호가 오는데, 이는 함수 본문을 포함합니다.fn main() {} 함수의 이름 규칙은 스네이크 케이스를 따릅니다. (명명 규칙 (Naming Convention))즉, 모든 것이 소문자이며, 단어 사이에는 밑줄을 사용합니다.함수에서 값을 반환할 수 있습니다.그렇게 하기 위해 화살표 구문을 사용하여 반환 타입을 명시합니다.fn my_function(x: i32) -> i32 {}Rust에서 함수의 마지막 표현식은 반환 값으로 사용합니다.함수가 마지막 표현식을 반환 값으로 사용하려면 세미콜론을 생략해야.. 2024. 7. 6.
Rust 기본, 상수와 정적 변수 (Constants, Statics) 비교. Rust 기본, 상수와 정적 변수 (Constants, Statics) 비교.상수(const)와 정적(static)은 어떤 범위(scope)에서도 사용할 수 있다.두 경우 모두 명시적으로 타입을 선언해야한다. const는 인라인 처리됩니다.이는 컴파일 타임에 상수를 사용하는 부분에 직접 값이 대체됩니다. static은 메모리에 존재하므로 주소를 가집니다. (프로그램과 같은 수명을 가집니다.)또한 프로그램의 모든 스레드에서 접근 가능하므로, static mut 사용할 경우 스레드 안전성을 확보하기 위해 unsafe 키워드 혹은 Mutex를 통해 값을 변경할 수 있습니다.  CODEconst MAX_PLAYER: u8 = 10;static SNOWOODS_NAME: &str = "Rusty Snowoods".. 2024. 7. 6.