본문 바로가기

Rust/Basic

(11)
[Rust Tutorial] 11 - Option IntroRust에서는 null값이 없는 대신에 None이 있습니다. 하지만 None은 null과 다른 점이 있습니다. null은 단독으로 사용할 수 있었지만, None의 경우 Option이란 Type을 사용해야 합니다. Option이란 None, 혹은 Some(Value)중 하나의 값임을 Enum으로 나타낸 Type입니다. 즉 Value를 바로 사용하기 전에 None인지 확인하고 사용하라는 의미이지요. None을 값으로 오해하지 않도록 하는 Rust의 방지책 중 하나입니다. 정리하자면 아래와 같습니다. Option : T Type(generic)을 가지는 Some(value)이거나  None인 값을 가지는 Enum.Some(value) : Option와 대응되는 값. T처럼 바로 사용할 수는 없다. v..
[Rust Tutorial] 10 - Generic IntroGeneric이란? Type에 의존하지 않는 유연한 코드를 작성할 수 있도록 도와주는 기능입니다. Generic을 처음 접하게 되면 Code의 새로운 문법으로 인한 거부감이 있을 수 있습니다. 하지만 Rust에서 Generic은 꽤 이점이 많은 기능입니다.  코드 재사용성 향상 : 여러가지 Type에 대해서 동작이 필요할 때 각 Type별로 작성할 필요 없이 Generic을 통해 범용 코드를 작성할 수 있습니다.타입 안전성 보장 : Generic을 사용하면 Compiler가 코드에서 type의 일관성을 검증합니다. 특히 Trait Bound (Generic Constraints) 로 특성이 포함되지 않은 Type은 Generic에 허용하지 않도록 Compiler가 검증합니다. zero-cost ..
[Rust Tutorial] 9 - mod, use Intro필자는 처음 보는 Programming language를 접하게 되면 가장 먼저 찾아보는 것이 있습니다. 변수 선언? 반복문? class? 모두 아닙니다. 저는 source file이 다른 path에 있는 source file을 읽는 방법을 항상 가장 먼저 찾습니다. 왜냐하면 공부한 내용을 적다보면 분리해야 할 때가 있는데 file 단위로 분리하지 않으면 곤란한 경우가 많기 때문입니다. 그리고 이런 속성은 언어별로 많이 다르게 동작합니다. (main file에서 modules/util를 불러온다고 가정합니다)C/C++ : #include "modules/utils.h"로 header 불러오기Java : util code는 package 선언, import modules.Util로 불러오기Pyth..
[Rust Tutorial] 8 - Struct, Impl, Trait IntroRust는 Class가 없습니다. 대신에 Rust는 다음과 같은 개념으로 Object에 대한 정의를 합니다. Data의 구조를 설계하는 Struct (구조)Behavior(행동)를 정의하는 Trait (특성)Data에 Behavior를 연결하여 구현하는 Impl (구현) Rust에서는 Struct, Trait, Impl 이 3가지로 Object를 정의합니다. 개인적인 사용 경험에 따르면 Struct + Impl로 구현을 하거나 mod + Struct + Impl + Trait으로 이전 class처럼 만드는 것도 가능합니다. 하지만 Rust의 철학은 확실히 class가 아닌 3가지로 분리한 문법을 지향하고 있습니다. 이유는 아래와 같습니다. 명시적이고 유연한 설계 : 데이터와 동작을 분리하여 같은..
[Rust Tutorial] 7 - Ownership Intro프로그래밍을 처음 접할 때 C/C++를 배우게 된다되면 가장 큰 벽 중 하나는 바로 포인터(pointer)입니다. Rust에서는 Ownership(소유권) 개념이 이와 비슷한 벽일 수 있습니다. 다른 Programming에서는 나오지 않는 규칙이기 때문이죠. Ownership : 하나의 데이터는 하나의 변수가 소유한다.  하지만 Rust의 소유권 개념은 새로운 규칙일 뿐 그렇게 어렵지는 않습니다. 만약 여러분이 소유권 규칙을 어긴 코드를 작성했을 경우 rust에 내장된 Linter가 소유권을 위반한 위치와 대처법에 대해서 상세하게 알려주기 때문에 큰 부담감을 가지지 않아도 됩니다. 애초에 소유권 규칙을 어기고 build를 수행하게 된다면 컴파일 타임 에러(Compiler time error)가 ..
[Rust Tutorial] 6 - Control Flow Introrust의 흐름 제어(분기문, 반복문)에 대한 설명과 예제입니다. rust는 이 부분에서는 타 언어들과 거의 비슷합니다. 차이가 있다고 한다면 다음과 같은 부분이 있습니다. 무한루프 예제인 loopslice 표기법 (1..5, 1..=10)match(switch, case), if let 코드 예제를 통해 확인해 보겠습니다. Code ExampleRust 1.79.0 (released 2024-06-13) fn main(){ // ========================================= // Conditionals (분기문) // ========================================= /* [Example] if, else : 가장 기초..
[Rust Tutorial] 5 - Function Introrust의 함수 에 대한 설명과 예제입니다. rust의 함수는 기존 언어와는 좀 다른 점들이 있습니다.  return keyword 없이 return할 수 있으며 이 문법이 rust의 기본 문법이다.borrow 규칙으로 인해 값을 복사하는 함수, 값을 소모하는 함수가 구분된다.closure 문법 (이건 사실 모든 언어가 다 다르긴 합니다)function 자체의 input, output에 대한 설명보다는 rust가 가지고 있는 function의 특징 위주로 예제를 작성해 보았습니다.  Code ExampleRust 1.79.0 (released 2024-06-13) fn main(){ #[allow(warnings)] // 경고문구 무시할때 사용 fn no_return_function..
[Rust Tutorial] 4 - Data Type IntroRust에서 제공하는 Data Type 여러 가지가 있지만 기본적으로 제공하는 Type은 크게 Primary Type과 Advenced Type, Compound Type, Collection Type으로 나눌 수 있습니다.  Primary Type : 정수, 소수, 문자(char), 참/거짓, Advenced Type : 문자열(&str, String)Component Type : Tuple, Array, Slice, ...Collection Type : Vector, Map, Set, ...Custom Type : Enum, Struct, ... 예제를 통해 어떻게 사용할 수 있는지 확인해 보겠습니다.  Code ExampleRust 1.79.0 (released 2024-06-13) fn ..
[Rust Tutorial] 3 - Variables IntroRust language에서 Variable에 대한 간단한 설명을 하고자 합니다.Immutable : Rust 변수는 기본적으로 불변(Immutable)입니다.가변(mutable) 변수로 선언하려면 mut 키워드를 사용해야 합니다.Static Type : Rust는 static type language입니다. 모든 변수의 Type이 Compile time에 결정됩니다.Type은 명시적으로 지정할 수 있지만 대부분의 경우 Compiler가 스스로 추론합니다.Rust는 변수를 초기화 하지 않으면 사용할 수 없습니다. (let x; 같은 표현은 불가)Shadowing : 동일한 이름의 변수를 재 선언하여 이전 변수를 "감출 수"(Shadowing) 있습니다.Ownership and Lifetimes ..
[Rust Tutorial] 2 - Cargo 사용법 Intro Cargo는 Rust의 공식 패키지 매니저이자 빌드 시스템으로, Rust 프로젝트를 효율적으로 관리하고 빌드, 실행, 테스트, 의존성 관리를 돕는 도구입니다. Cargo는 Rust 언어와 함께 설치되며, Rust 개발에서 필수적인 역할을 합니다. Cargo 사용법에 대한 간단한 설명입니다. Cargo의 이점편리한 의존성 관리:라이브러리를 쉽게 추가하고 버전을 관리할 수 있습니다.일관된 빌드 환경:동일한 명령어로 디버그 및 릴리스 빌드를 생성합니다.생태계 통합:Rust의 공식 패키지 레지스트리인 Crates.io와 통합되어 필요한 크레이트를 쉽게 가져올 수 있습니다.테스트와 문서화 지원:내장된 테스트 및 문서화 도구로 개발 생산성을 높입니다. Cargo 사용 예시## version checkca..