러스트 (Rust)

    러스트 (Rust) 열거형 3 - if-let 키워드

    if-let 을 이용한 열거형 흐름 제어 let some_u8_value = Some(0u8); if let Some(3) = some_u8_value { println!("three"); } 어떤 값이 3일 때만 실행되는 if let 구문 let some_u8_value = Some(0u8); match some_u8_value { Some(3) => println!("three"), _ => (), } 어떤 값이 3일 때만 실행되는 match 구문 생각해볼 점 열거형의 variants 의 케이스별로 로직을 나누는 것이 아닌, 특정 경우에만 수행될 로직을 작성하고 나머지 로직에서는 별다른 처리가 일어나지 않길 원한다면 if let 이 더 명확한 의도를 갖는 코드이다. 다만, if let 을 사용하면 m..

    러스트 (Rust) 열거형 2 - match 키워드

    match 흐름 제어 연산자 match 는 패턴을 이용해 패턴에 매칭된 경우, 실행될 코드를 작성할 수 있게 해준다. 동전 분류기에서 동전을 작은 구멍부터 넣어보아 크기에 알맞은 구멍으로 쏙 들어가게 하는 것과 같다. 여기서 좋은 점은 놓치는 variant 가 없다는 것이다. 예제 1: variants 별로 처리하기 enum Coin { Penny, Nickel, Dime, Quarter, } fn value_in_cents(coin: Coin) -> u32 { match coin { Coin::Penny => { println!("Lucky penny!"); 1 }, Coin::Nickel => 5, Coin::Dime => 10, Coin::Quarter => 25, } } variants 하나마다 ..

    러스트 (Rust) 열거형 1 - 기본 문법

    열거형 (enumerations, enums) 이란? 하나의 타입이 가질 수 있는 값의 경우의 수가 제한적일 때 사용할 수 있다. ex) 손가락이라는 타입은 일반적으로 '엄지', '검지', '중지', '약지', '새끼' 중에 하나이다. 러스트에는 Option, match, if let 과 같은 키워드를 통해 열거형을 효과적으로 표현할 수 있다. 열거형은 많은 언어에 존재하지만, 각 언어마다 열거형으로 할 수 있는 것들이 다르다. 러스트의 열거형은 F#, OCaml, Haskell 과 같은 함수형 언어의 대수 데이터 타입과 비슷하다. 열거형이 적절한 경우 variants 라 불리는 한정적 경우의 수 중 하나만 될 수 있을 때 적절하다...

    러스트 (Rust) 메서드 (Method) 문법

    메서드 문법 (Rust Method Syntax) 구조체 (혹은 열거형 혹은 트레이) 에 종속된 함수를 말한다. 구조체의 내용 안에 정의된다. 첫번째 파라미터는 언제나 &self 이다. 첫번째 파라미터가 &self 가 아닌 경우엔, 연관 함수가 된다. 메서드 정의하기 #[derive(Debug)] struct Rectangle { length: u32, width: u32, } impl Rectangle { fn area(&self) -> u32 { self.length * self.width } } fn main() { let rect1 = Rectangle { length: 50, width: 30 }; println!( "The area of the rectangle is {} square pixe..

    러스트 (Rust) 구조체를 이용한 리팩토링 연습

    시작 코드 fn main() { let length1 = 50; let width1 = 30; println!( "The area of the rectangle is {} square pixels.", area(length1, width1) ); } fn area(length: u32, width: u32) -> u32 { length * width } 길이와 너비를 받아서 사각형의 면적을 구하는 프로그램이다. 별다른 문제는 없지만, 리팩토링으로 개선될 여지가 있는 코드이다. 1차 개선: 튜플 이용하기 fn main() { let rect1 = (50, 30); println!( "The area of the rectangle is {} square pixels.", area(rect1) ); } fn ..

    러스트 (Rust) 구조체 정의하고 생성하는 방법

    구조체 정의 방법 struct User { username: String, email: String, sign_in_count: u64, active: bool, } struct 키워드를 사용한다. 타입스크립트 인터페이스 정의와 비슷하다. // 타입스크립트 예제 export interface User { createdAt: string; id: string; isAdmin: boolean; karma: number; } 구조체 초기화 방법 구조체를 정의만 해서는 실제로 메모리에 아무것도 생기지 않는다. 구조체를 인스턴스화 해야 메모리에 실제 객체가 생긴다. let user1 = User { email: String::from("someone@example.com"), username: String::fr..

    러스트 (Rust) 의 슬라이스 (Slice) 개념

    러스트 (Rust) 의 슬라이스 (Slice) 개념

    러스트 (Rust) 슬라이스란? 컬렉션 중 일련의 연속된 요소들을 참조한다고 표현할 수 있다. 배열, 문자열과 같이 메모리상에 나열된 긴 데이터 중 일부를 짤라서 참조한다. 메모리로 문자열을 가리킬 때의 문제 fn main() { let mut s = String::from("hello world"); let word = first_word(&s); // word는 5를 갖게 될 것입니다. s.clear(); // 이 코드는 String을 비워서 ""로 만들게 됩니다. // word는 여기서 여전히 5를 갖고 있지만, 5라는 값을 의미있게 쓸 수 있는 스트링은 이제 없습니다. // word는 이제 완전 유효하지 않습니다! } // 첫번째 단어가 몇글자인지 반환하는 함수이다. // ' '를 발견하면, ' ..

    러스트 (Rust) 의 참조자 (References) 와 빌림 (Borrowing) 개념

    러스트 (Rust) 의 참조자 (References) 와 빌림 (Borrowing) 개념

    러스트의 참조자 (References) 와 빌림 (Borrowing)이란? 러스트의 소유권 개념은 러스트 소유권 글 링크 를 참조하여 이해하도록 하자. 참조자와 빌림은 소유권을 개념을 바탕으로 이해해야 한다. & 기호를 통해 소유권을 단순히 참조하며 빌린다는 표현을 쓸 수 있다. fn main() { let s1 = String::from("hello"); let len = calculate_length(&s1); println!("The length of '{}' is {}.", s1, len); } fn calculate_length(s: &String) -> usize { s.len() } 위의 코드에서 본래 이전에 배웠던 소유권 개념을 통해 이해하면 s1 의 소유권은 calculate_length..

    러스트 (Rust) 의 소유권 (ownership) 개념

    러스트 (Rust) 의 소유권 (ownership) 개념

    러스트의 소유권이란? 말 그대로 변수의 소유권이 누구에게 있냐 를 따져보는 것이다. 소유권이 필요한 이유는 소유권이 붕 떠버린 변수에 할당된 메모리를 반납하기 위해서이다. 변수는 컴퓨터의 메모리를 사용하고, 메모리는 한정적 자원이라 사용이 끝나면 반납되어야 한다. 스택과 힙 소유권을 공부하기 위해 스택과 힙 개념을 알아야 한다. 스택 먼저 들어간 데이터가 가장 나중에 나오는 방식으로 구현된다. 모든 데이터의 크기가 고정된 크기를 가져야 한다. 위의 특징 덕에 안으로 깊숙히 들어간 데이터 위에 중간부터 다른 데이터를 쌓는 것은 불가능하다. 계속 위로만 쌓고, 위에 있는 것 먼저 꺼내오기에 속도가 빠르다 정적으로 관리되기 때문에 할당과 해제가 물흐르듯 자연스럽다. 힙 메모리의 특정 지점을 선정하여 사용 중이..

    러스트 (Rust) 의 반복문 정리

    러스트 (Rust) 반복문 세가지 유형이 있다. loop: 무한 반복에 사용 while: 조건 반복에 사용 for: 보통 iterable 한 요소를 순환하기 위해 사용 loop 사용 예제 fn main() { loop { println!("again!"); } } 무한으로 again! 을 출력하며, break; 혹은 Ctrl + C 를 통해 정지시킬 수 있다. while 사용 예제 fn main() { let mut number = 3; while number != 0 { println!("{}!", number); number = number - 1; } println!("LIFTOFF!!!"); } 조건이 true 인 동안 반복한다. for 사용 예제 fn main() { let a = [10, 20..

    러스트 (Rust) 의 제어문 문법 정리

    러스트의 제어문 if 표현식 js 와 다르게 괄호 없이 바로 조건이 온다. 오직 bool 타입만 if 의 조건으로 올 수 있다. fn main() { let number = 3; if number < 5 { println!("condition was true"); } else { println!("condition was false"); } } else if 표현식 가장 첫번째로 매칭된 조건이 수행된다. fn main() { let number = 6; if number % 4 == 0 { println!("number is divisible by 4"); } else if number % 3 == 0 { println!("number is divisible by 3"); } else if number ..

    러스트 (Rust) 함수 사용법 핵심 정리

    러스트 함수의 시작지점 main 함수로부터 시작한다. main 함수를 기점으로 어떠한 함수든 연계하여 불러올 수 있다. 러스트 함수 컨벤션 스네이크 케이스(snake-case) 를 사용한다. 함수 선언은 fn 으로 한다. fn main() { println!("Hello, world!"); another_function(); } fn another_function() { println!("Another function."); } $ cargo run Compiling functions v0.1.0 (file:///projects/functions) Finished dev [unoptimized + debuginfo] target(s) in 0.28 secs Running `target/debug/func..

반응형