Rust, 쉽게 하자!

Rust 57

[Rust] If let

2. If let If let 구문은, match 문을 사용하면서 단 하나의 케이스만 처리하고 나머지 케이스는 아무런 일을 하지 않을 때, 장황하게 match 문을 사용하는 대신 간결하게 사용할 수 있습니다. 다음 코드를 봅시다. fn main() { let x = 10; if let 10 = x { // 1 println!("ten"); } match x { // 2 10 => { println!("ten") }, 20 => {}, 30 => {}, 40 => {}, 50 => {}, 60 => {}, _ => {} } } // 출력 ten ten // 1과 // 2는 똑 같은 일을 합니다. // 2: match 문을 사용 해서 변수 x가 10일 때만 “ten”을 출력 하고 나머지 경우에는 아무런 일도..

Rust 입문 2022.10.07

[Rust] match 변수 바인딩

1. match 변수 바인딩 앞에서 match 문의 간단한 사용법에 대해서 살펴 봤습니다. 여기서는 match문의 변수 바인딩에 대해서 알아 보겟습니다. 먼저 range에 변수를 바인딩하는 방법입니다. 예를 들어 설명하겠습니다. let x = 10; match x { // 1 n@1..=5 => println!("{}는 5 이하", n), n@5..=10 => println!("{}는 5 이상, 10 이하", n), n@_ => println!("{}는 10보다 크다", n), } // 출력 10는 5 이상, 10 이하 // 1: 우선 range를 1..=5 형식으로 지정한 것을 볼 수 있습니다. 변수 x가 이 범위에 포함 되면 코드를 실행합니다. mach 문에서 시용할 수 있는 Range는 폐쇄형 범위..

Rust 입문 2022.10.07

[Rust] Method

3. Method struct와 enum은 객체가 사용할 수 있는 함수인 메소드를 정의할 수 있습니다. 대부분의 다른 언어에서는 메소드가 클래스나 구조체의 정의 구현부 내에 프로퍼티(또는 멤버)들과 같은 공간에 정의 됩니다. 하지만 Rust에서는 메소드의 구현부가 구조체/열거형의 정의부 밖에 따로 존재합니다. 다음과 같은 형식으로 정의합니다. impl 구조체/열거형 이름 { fn 메소드 이름 (&self, 파라미터) -> 반환 타입{ ... } } impl 블록 안에 여러개의 메소드를 정의할 수 있습니다. 메소드의 정의는 함수를 정의하는 것과 동일합니다. 다만 첫번째 파라미터는 반드시 ‘&self’입니다. ‘&self’는 객체 자기 자신을 참조한다는 의미 입니다. 즉 객체에 종속된 함수라는 의미가 됩니다..

Rust 입문 2022.10.07

[Rust] Enum

2. Enum enum은 관계 있는 데이터들을 묶고 이름도 정해주어서 데이터를 좀 더 일관성있고 효율적으로 다룰 수 있게 해줍니다. enum 이름{ 데이터1, 데이터2, 데이터3, ... } enum은 match와 함께 잘 사용 됩니다. 다음 예를 통해 알아 보겠습니다. #[derive(Debug)] // DAY에 Debug 트레이트 구현 enum DAY { // DAY enum 선언 Mon, Tue, Wen, Thu, Fri, Sat, Sun, } fn main() { let mut day = DAY::Fri; // DAY 타입 변수 day 생성 match &day { Mon => println!("{:#?}", day), Tue => println!("{:#?}", day), Wen => printl..

Rust 입문 2022.10.05

[Rust] Struct

1. Struct 구조체, Struct 는 필드 또는 멤버라고 불리는 데이터들을 묶어 놓은 데이터 집합입니다. 필드(멤버)는 각각 다른 타입을 가질 수 있습니다. 그리고 이름을 가집니다. 구조체를 하나 만들어 보겠습니다. struct People { // 1 구조체 선언 name: String, age: u32, job: String, } fn main() { // 2 구조체 인스턴스 생성 let mut man1 = People { name: String::from("Jane"), age: 12, job: String::from("student"), }; println!("{} is a {} old {}", man1.name, man1.age, man1.job); } // 출력 Jane is a 12 o..

Rust 입문 2022.10.05

[Rust] Closure

2. Closure closure는 익명함수입니다. 그래서 이름이 없습니다. 대신 다른 것은 함수와 비슷합니다. 단 파라미터를 선언하는 부분만 약간 다릅니다. (파라미터) 대신 |파라미터|를 사용합니다. let 클로저 이름 = |파라미터|{...} 클로저는 이름이 없다더니 클로저의 이름아라니? 이상합니다. 하지만 클로저 선언부에는 ‘fn’ 키워드도 없고, 클러저 이름도 없습니다. 다만 익명으로 선언된 후에 변수처럼 할당해 주는 것입니다. 당연히, 이렇게 변수에 할당하지 않고 익명 함수를 그대로 사용할 수 있습니다. /// 10을 더하는 함수 fn add10(n: i32) -> i32 { return n + 10; } /// 문자엻을 출력하는 함수 fn show_this(s: String) { printl..

Rust 입문 2022.10.05

[Rust] 함수

1. 함수 Rust의 함수 선언 키워드는 ‘fn’입니다. 기본 형식은 다음과 같습니다. fn 함수명(파라미터 : 파라미터 타입) -> 반환타입{ ... } “fn 함수명(파라미터 : 파라미터 타입) -> 반환타입” 부분을 함수의 시그니처라고 합니다. 그 뒤의 {…} 부분은 함수의 몸체 (body)라고 합니다. i32 타입의 정수를 파라미터로 받아서 10을 더해 반환하는 간단한 함수를 만들어 보겠습니다. 이름은 ‘add10’이라고 하겠습니다. fn main() { let mut x = add10(5); // 5를 파라미터 값으로 함수 호출 println!("{}", x); } // 함수 선언 fn add10(n:i32)->i32{ return n + 10; } // 출력 15 만약 반환값이 없다면 ‘->’..

Rust 입문 2022.10.05

[Rust] match

6. match match는 다른 언어의 switch문과 비슷합니다. 하지만 그 활용도나 중요성은 훨씬 큽니다. match 변수{ 변수1 => 실행1, 변수2 => 실행2, ... } 예를 보겠습니다. let mut var1 = 3; match var1{ 1 => println!("var = 하나"), 2 => println!("var = 둘"), 3 => println!("var = 셋"), 4 => println!("var = 넷"), _ => println!("var = 그외"), // default } // 출력 var = 셋 위 예에서 match 문 마지막 줄의 ‘_’은 다른 언어의 ‘default’와 같은 역할을 합니다. 즉 앞서 나온 선택지 외의 모든 선택지를 의미합니다. 당연히 가장 마지막..

Rust 입문 2022.10.02

[Rust] For

5. For Rust의 for문은 C 타입의 언어에 비해 약간 독특합니다. Python 스타일에 가깝습니다. for index in range{ ... } 예를 들어 보겠습니다. let arr1 = [1,2,3,4,5]; for i in arr1{ print!("{} ", i); } // 출력 1 2 3 4 5 위 예에서는 range로 array를 사용 했습니다. range에는 벡터도 사용할 수 있습니다. let vec1 = vec![1,2,3,4,5]; for i in vec1{ print!("{} ", i); } // 출력 1 2 3 4 5 range를 바로 작성해서 사용할 수도 있습니다. for i in 1..6{ print!("{} ", i); } // 출력 1 2 3 4 5 위 예에서 1..6을..

Rust 입문 2022.10.02
반응형