From 56696982d05153777a8940b272655f0c4f723b9d Mon Sep 17 00:00:00 2001 From: mike2ox Date: Sat, 20 Apr 2024 23:41:52 +0900 Subject: [PATCH 1/2] docs: add a screenshot about week 3 submission --- week3/mike2ox/images/week3_result.png | Bin 0 -> 21163 bytes 1 file changed, 0 insertions(+), 0 deletions(-) create mode 100644 week3/mike2ox/images/week3_result.png diff --git a/week3/mike2ox/images/week3_result.png b/week3/mike2ox/images/week3_result.png new file mode 100644 index 0000000000000000000000000000000000000000..2553486e46136213249901f77ef5984abdf1c448 GIT binary patch literal 21163 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 Date: Sun, 19 May 2024 22:40:22 +0900 Subject: [PATCH 2/2] doc: upload a summary about week 3 submission --- week3/mike2ox/mike2ox.md | 172 +++++++++++++++++++++++++++++++++++++++ 1 file changed, 172 insertions(+) create mode 100644 week3/mike2ox/mike2ox.md diff --git a/week3/mike2ox/mike2ox.md b/week3/mike2ox/mike2ox.md new file mode 100644 index 0000000..cce97f2 --- /dev/null +++ b/week3/mike2ox/mike2ox.md @@ -0,0 +1,172 @@ +# (늦은) Week 3 Submission + +![week3_result.png](./images/week3_result.png) + +## strings + +- 소유권 규칙을 설명하기에 적합한 타입임(그렇다고 쉬운건 아님) +- `&str` 타입은 스택에 할당됨 + - 문자열 슬라이스라고도 함 + - 컴파일 타임에 이미 알고 있음 + - 그래서 불변성을 띔 +- `String` 타입은 heap에 할당됨 + + - 런타임 시점에 메모리 할당자에 의해 크기가 결정됨 + - 사용이 끝났을 때 메모리를 해제할 방법이 필요(러스트에서는 스코프를 벗어나면 자동으로 해제됨) + - UTF-8로 인코딩된 문자열 타입 + +- `String`은 바이트의 collection으로 구현되있음 + - Vec과 유사함 + - push_str, push 등의 메소드를 사용할 수 있음 +- 문자열 조합에는 `+` 연산자를 사용할 수 있음 + +```rust +let s1 = String::from("Hello, "); +let s2 = String::from("world!"); +let s3 = s1 + &s2; +``` + +> `+` 연산자는 `add` 메소드를 호출함 +> `add` 메소드는 `self`를 소유하게 됨 +> `s1`은 더이상 사용할 수 없음 +> `&s2`를 사용하는 이유는 `add` 메소드가 `&str`을 받기 때문 +> `add` 메소드는 `+` 연산자를 사용할 때마다 호출되기 때문에 비효율적임 + +- 여러 문자열을 조합하고 싶을 때는 `format!` 매크로를 사용하는 것이 좋음 + +```rust +let s1 = String::from("tic"); +let s2 = String::from("tac"); +let s3 = String::from("toe"); + +let s = format!("{}-{}-{}", s1, s2, s3); +``` + +- 문자열 내부 인덱싱은 지원하지 않음 + - 인덱스 연산이 언제나 O(1) 시간복잡도를 가지도록 하기 위함 + - 숫자 하나를 사용하는 것보다 범위(슬라이스)를 사용하는 것이 좋음 + - 개별적인 유니코드 스칼라 값에 접근하려면 `chars` 메소드를 사용해야 함 + +```rust +let s = String::from("hello"); +let h = &s[0..1]; // "h" + + +for c in "नमस्ते".chars() { + println!("{}", c); +} +``` + +## modules + +- 모듈은 라이브러리를 구성하는 단위 +- 모듈은 파일 시스템의 디렉토리 구조와 일치함 +- 키워드 + - `mod` : 모듈을 정의함 + - `use` : 모듈을 가져옴 + - `pub` : 모듈을 외부로 공개함 + - `super` : 상위 모듈을 참조함 + +```rust +mod sound { // 모듈 정의 + pub mod instrument { // 공개 + 모듈 + pub fn clarinet() { // 공개 + // 함수 내용 + } + } +} + +use crate::sound::instrument; // 모듈 가져오기 +use self::sound::instrument; // 모듈 가져오기 +use super::sound::instrument; // 상위 모듈 가져오기 +``` + +## hashmaps + +- `HashMap` 타입은 키와 값의 쌍을 저장함 +- 키와 값은 모두 제네릭 타입이어야 함 +- 벡터처럼 인덱스가 아니라 임의의 키를 이용해서 데이터(값)을 가져오는데 유용함 + +```rust +use std::collections::HashMap; + +let mut values: HashMap = HashMap::new(); + +values.insert(String::from("blue"), 10); +values.insert(String::from("yellow"), 20); + +let blue = values.get("blue"); +``` + +- `HashMap`은 데이터를 소유하고 있지 않음 + + - 데이터를 참조하는 방식으로 사용함 + - 데이터를 소유하고 싶다면 `HashMap` 대신 `HashMap>`를 사용해야 함 + - `Box`는 heap에 데이터를 저장하도록 해줌 + - `HashMap`은 데이터를 소유하지 않기 때문에 데이터를 변경하려면 `mut` 키워드를 사용해야 함 + +- `get`메소드를 사용해 데이터를 가져올 수 있다. +- `entry` 메소드를 사용해 데이터를 업데이트할 수 있다. + +```rust +let mut scores = HashMap::new(); + +scores.insert(String::from("Blue"), 10); +scores.insert(String::from("Yellow"), 50); + +let team_name = String::from("Blue"); +let score = scores.get(&team_name); // 10 + +for (key, value) in &scores { + println!("{}: {}", key, value); +} + +scores.entry(String::from("Blue")).or_insert(50); // 값이 없을 때만 추가 +``` + +## options + +- `Option`는 `Some`과 `None` 두 가지 값을 가지고 `null`을 대체함 +- `Option`는 `match` 표현식을 사용해 값을 추출할 수 있음 + +```rust +let some_number = Some(5); +let some_string = Some("a string"); + +let absent_number: Option = None; + +let x: i8 = 5; +let y: Option = Some(5); + +let sum = x + y; // error +``` + +- `Option`은 `is_some`, `is_none`, `unwrap`, `expect` 등의 메소드를 제공함 +- `unwrap`은 `Some`의 값을 반환하고 `None`일 때 패닉을 발생시킴 +- `expect`는 `unwrap`과 동일하지만 패닉 메시지를 지정할 수 있음 + +```rust +let x: Option = Some(5); +let y: Option = None; + +x.unwrap(); // 5 +y.unwrap(); // panic +y.expect("Failed to unwrap"); // panic with message +``` + +- `ref` 키워드를 사용해 `Option`의 값을 해당 case scope에서 참조할 수 있음 + +```rust +let x: Option = Some(5); + +match x { + Some(ref value) => println!("Got a value: {}", value), + None => println!("No value"), +} +``` + +## 후기 + +- String 타입과 &str 타입의 차이점을 이해하는데 시간이 걸렸다. + - 추가로 &str을 String으로 변환하는 여러 방법도 알게 되었다. (`to_string`, `to_owned`, `into`) +- 그 외 모듈, 해시맵, 옵션 등의 개념은 다른 언어에서도 비슷한 개념이라 쉽게 이해할 수 있었다.