์ผ | ์ | ํ | ์ | ๋ชฉ | ๊ธ | ํ |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 | 31 |
Tags
- ํ์ด์ฌ ์ฒผ๋ฆฐ์ง
- ์ฐ๋ถํฌ
- ๋ฌ์คํธ ํ๋ก๊ทธ๋๋ฐ ๊ณต์ ๊ฐ์ด๋
- ์๋ฐ ๊ธฐ์ด
- Reversing
- C
- Python challenge
- Rust
- ์๋ฐ
- ํ์ด์ฌ ์๊ณ ๋ฆฌ์ฆ
- ์ค๋ผํดDB
- ๋ฐ์ดํฐ๋ฒ ์ด์ค
- ํ์ด์ฌ ์ฑ๋ฆฐ์ง
- ๋ฐ์ดํฐ ํต์
- ์๊ณ ๋ฆฌ์ฆ
- data communication
- ubuntu
- Database
- ๋ฐฑ์ค
- java
- ๋ฌ์คํธ ์์
- Python
- ๋ฐฑ์ค ๋ฌ์คํธ
- ๋ฌ์คํธ
- ์ค๋ผํด
- OS
- ํ์ด์ฌ
- ์ด์์ฒด์
- Operating System
- ์๋ฐ ๊ฐ๋
Archives
- Today
- Total
IT’s Portfolio
[Rust] Start Rust (Day 14) - Common Collections ๋ณธ๋ฌธ
728x90
๋ฐ์ํ
๐ฆ Rust Day 14
๐ณ๏ธ Common Collections
- ๋ด์ฅ๋ ๋ฐฐ์ด๊ณผ ํํ๊ณผ๋ ๋ฌ๋ฆฌ ์ปฌ๋ ์
์ด ๊ฐ๋ฆฌํค๋ ๋ฐ์ดํฐ๋ ํ ๋ฉ๋ชจ๋ฆฌ์ ์ ์ฅ๋จ
- ๋ฐ์ดํฐ์ ํฌ๊ธฐ๋ฅผ ์ปดํ์ผ ์์ ์ ์ ํ์๊ฐ ์์ผ๋ฉฐ, ํ๋ก๊ทธ๋จ์ ์คํ ์ค์ ์ผ๋ง๋ ์ง ๊ทธ ํฌ๊ธฐ๋ฅผ ์ฆ๊ฐ์ํค๊ฑฐ๋ ๊ฐ์์ํฌ ์ ์์
๋ฒกํฐ(vector)
: ์ฐ์๋ ์ผ๋ จ์ ๊ฐ์ ์ ์ฅํจ๋ฌธ์์ด(string)
:๋ฌธ์(character)
์ ์ปฌ๋ ์ ํด์ ๋งต(hash map)
: ํน์ ํค์ ๊ฐ์ ์ฐ๊ฒฐํ ๋ ์ฌ์ฉ. ํด์ ๋งต์ ๋ ๋ฒ์ฉ์ผ๋ก ์ฌ์ฉ๋๋๋งต(map)
์ ๊ตฌํํ ๊ตฌํ์ฒด์
1๏ธโฃ ๋ฒกํฐ์ ์ผ๋ จ์ ๊ฐ ์ ์ฅํ๊ธฐ
Vec<T>
ํ์- ๋ฒกํฐ๋ฅผ ์ด์ฉํ๋ฉด ํ๋ ์ด์์ ๊ฐ์ ํ๋์ ๋ฐ์ดํฐ ๊ตฌ์กฐ์ ๋ด์ ์ ์์ผ๋ฉฐ ๋ชจ๋ ๊ฐ์ ๋ฉ๋ชจ๋ฆฌ์์ ์ฐ์์ผ๋ก ์ ์ฅ๋จ
- ์ด๋ค ํ์ ์ด๋ ์ ์ฅ ๊ฐ๋ฅ
- ํน์ ํ ํ์ ์ ์ฅ ์ ํด๋น ํ์ ์ ๋ํ ์ ๋ ธํ ์ด์ ์ ๋ช ์ํด์ฃผ์ด์ผ ํจ
- ๊ฐ์ ํ์ ์ ๊ฐ๋ง์ ์ ์ฅํ ์ ์์
๐ค ์๋ก์ด ๋ฒกํฐ ์์ฑํ๊ธฐ
fn main() {
let v: Vec<i32> = Vec::new();
}
Vec::new
ํจ์๋ก ์๋ก์ด ๋น ๋ฒกํฐ ์์ฑ- ํ์ ์ ๋ํ ์ ๋ ธํ ์ด์ ๋ช ์
- ๋ฒกํฐ๋
์ ๋ค๋ฆญ(generic)
์ ์ด์ฉํด ๊ตฌํ๋จ - ๋ฌ์คํธ๋ ๋ฒกํฐ์ ์ผ๋จ ๊ฐ์ ์ถ๊ฐํ๋ฉด ๊ทธ ํ์
์ ์ ์ถํ ์ ์์
- ๋น ๋ฒกํฐ๋ฅผ ์์ฑํ์ง ์๋ ์ด์ ํ์ ์ ๋ ธํ ์ด์ ์ ์ฌ์ฉํ ์ผ์ด ๋ณ๋ก ์์
fn main() {
let v = vec![1, 2, 3];
}
- ์ง์ ํ ๊ฐ์ ์ ์ฅํ๋ ์๋ก์ด ๋ฐฑํฐ๋ฅผ ์์ฑํ๋
vec!
๋งคํฌ๋ก - ์ด๊น๊ฐ ์ง์ ์
i32
ํ์ ์ ๊ฐ์ ์ง์ ํ์ผ๋ฏ๋ก ํ์ ์ ๋ ธํ ์ด์ ์ ์ถ๊ฐํ ํ์๊ฐ ์์
๐ค ๋ฒกํฐ ์์
fn main() {
let mut v = Vec::new();
v.push(4);
v.push(5);
v.push(6);
v.push(7);
}
push
๋ฉ์๋๋ฅผ ์ด์ฉํด ๋ฒกํฐ์ ๊ฐ ์ถ๊ฐ
๐ค ๋ฒกํฐ ํด์
- ๋ค๋ฅธ ๊ตฌ์กฐ์ฒด์ ๋ง์ฐฌ๊ฐ์ง๋ก ๋ฒกํฐ ์ญ์ ๋ฒ์๋ฅผ ๋ฒ์ด๋ ๋
drop
๋ฉ์๋๊ฐ ํธ์ถ๋จ - ๋ฒกํฐ๊ฐ ๋ฉ๋ชจ๋ฆฌ์์ ํด์ ๋๋ฉด ๋ฒกํฐ์ ์ ์ฅ๋ ๋ชจ๋ ๊ฐ๋ ํจ๊ป ํด์ ๋จ
- ๋ชจ๋ ์ ์๊ฐ๋ ํด์ ๋จ
- ๋ฒกํฐ์ ์ฐธ์กฐํ ๊ฐ์ ์ ์ฅํ๋ ๊ฒฝ์ฐ์๋ ์ผ์ด ๋ณต์กํด์ง ์ ์์
๐ค ๋ฒกํฐ๋ก๋ถํฐ ๊ฐ ์ฝ๊ธฐ
fn main() {
let v = vec![1, 2, 3, 4, 5];
let third: &i32 = &v[2];
println!("์ธ ๋ฒ์งธ ์์ : {third}");
}
// Result
// ์ธ ๋ฒ์งธ ์์ : 3
์ธ๋ฑ์ค ๋ฌธ๋ฒ(indexing syntax)
์ด์ฉ&
์[]
๋ฅผ ์ด์ฉํด ์ ์ฅ๋ ๊ฐ์ ๋ํ ์ฐธ์กฐ๋ฅผ ๋ฆฌํด
fn main() {
let v = vec![1, 2, 3, 4, 5];
match v.get(2) {
Some(third) => println!("์ธ ๋ฒ์งธ ์์ : {third}"),
None => println!("์ธ ๋ฒ์งธ ์์๊ฐ ์์."),
}
}
// Result
// ์ธ ๋ฒ์งธ ์์ : 3
get
๋ฉ์๋ ์ด์ฉOption<&T>
ํ์ ์ ๊ฐ ๋ฆฌํด
fn main() {
let v = vec![1, 2, 3, 4, 5];
let no_value = &v[100];
let no_value = v.get(100);
}
- ๋ฒกํฐ์ ์กด์ฌํ์ง ์๋ ์ธ๋ฑ์ค์ ๊ฐ์ ์ ๊ทผํ ๋
[]
๋ฐฉ์์ํจ๋(panic)
๋ฐ์- ์ง์ ๋ ์ฐธ์กฐ๊ฐ ์กด์ฌํ์ง ์๋ ๊ฐ์ ๊ฐ๋ฆฌํค๊ธฐ ๋๋ฌธ
get
๋ฉ์๋๋ก ์กด์ฌํ์ง ์๋ ์ธ๋ฑ์ค์ ๊ฐ์ ์ ๊ทผํ๋ฉดNone
๊ฐ์ด ๋ฆฌํด๋จ
fn main() {
let mut v = vec![1, 2, 3, 4, 5];
let first = &v[0];
v.push(6);
}
- ํ์์
rustc
๋ฒ์ ์1.62.0
์ธ๋ฐ ์๋ฌ๊ฐ ๋ฐ์ํ์ง ์์- ์ผ๋จ ๊ฐ๋ ์ ์ ๋ฆฌํด๋๋ ค๊ณ ํจ
- ํ๋ก๊ทธ๋จ์ด ์ ํจํ ์ฐธ์กฐ๊ฐ์ ์ป๊ฒ ๋๋ฉด ๋ฒกํฐ์ ์ ์ฅ๋ ๊ฐ์ ๋ํ ์ฐธ์กฐ๊ฐ ๊ณ์ํด์ ์ ํจํ ์ ์๋๋ก ๋์ฌ๊ฐ ๊ฒ์ฌ๊ฐ ์คํ๋์ด ์์ ๊ถ๊ณผ ๋์ฌ ๊ท์น์ ์ ์ฉํจ
- ๊ฐ์ ๋ฒ์ ๋ด์์ ๊ฐ๋ณ ์ฐธ์กฐ์ ๋ถ๋ณ ์ฐธ์กฐ๋ฅผ ๋์์ ๊ฐ์ง ์ ์์
- ํ์ฌ ๋ฒกํฐ์ ํฌ๊ธฐ๊ฐ ์ถฉ๋ถํ ํฌ์ง ์๋ค๋ฉด ๋ฒกํฐ์ ๋ง์ง๋ง์ ์๋ก์ด ๊ฐ์ ์ถ๊ฐํ๊ธฐ ์ํด ์๋ก์ด ๋ฉ๋ชจ๋ฆฌ๋ฅผ ํ ๋นํ๊ณ ์ด๋ฏธ ์ ์ฅ๋ ๊ฐ๋ค์ ์๋ก์ด ๋ฉ๋ชจ๋ฆฌ ๊ณต๊ฐ์ผ๋ก ์ฎ๊ฒจ์ผ ํ ์๋ ์์
๐ค ๋ฒกํฐ์ ์ ์ฅ๋ ๊ฐ์ ์ํํ๊ธฐ
fn main() {
let v = vec![1, 2, 3, 4, 5, 6];
for i in &v {
println!("{i}");
}
}
// Result
// 1
// 2
// 3
// 4
// 5
// 6
for
๋ฌธ์ ์ด์ฉํด ๋ฒกํฐ์ ์ ์ฅ๋ ๊ฐ์ ๋ํ ๋ถ๋ณ ์ฐธ์กฐ๋ฅผ ์ป์ด์ ์ถ๋ ฅํจ
fn main() {
let mut v = vec![1, 2, 3, 4, 5, 6];
for i in &mut v {
*i += 50;
println!("{i}");
}
}
// Result
// 51
// 52
// 53
// 54
// 55
// 56
- ๊ฐ๋ณ ๋ฒกํฐ์ ์ ์ฅ๋ ๊ฐ์ ๋ํ ๊ฐ๋ณ ์ฐธ์กฐ๋ฅผ ์ป์ด์ ๊ฐ์ ๋ณ๊ฒฝํจ
- ๊ฐ๋ณ ์ฐธ์กฐ๊ฐ ๊ฐ๋ฆฌํค๋ ๊ฐ์ ๋ณ๊ฒฝํ๋ ค๋ฉด
+=
์ฐ์ฐ์ ์ฌ์ฉ ์ ์์ญ์ฐธ์กฐ ์ฐ์ฐ์(*)
๋ฅผ ์ด์ฉํด ๋ณ์i
์ ์ ์ฅ๋ ๊ฐ์ ๊ฐ์ ธ์์ผ ํจ
๐ค ์ด๊ฑฐ์๋ฅผ ์ด์ฉํด ์ฌ๋ฌ ํ์ ์ ์ฅํ๊ธฐ
- ์ด๊ฑฐ์์ ์ด๊ฒ๊ฐ์ ๊ฐ์ ์ด๊ฑฐ์ ํ์ ์ผ๋ก ํ๊ฐ๋๋ฏ๋ก ๋ฒกํฐ์ ๋ค๋ฅธ ํ์ ์ ๊ฐ์ ์ ์ฅํ๋ ค๋ฉด ์ด๊ฑฐ์๋ฅผ ์ ์ํด ์ฌ์ฉํ๋ฉด ๋จ
enum SpreadsheetCell {
Int(i32),
Float(f64),
Text(String),
}
fn main() {
let row = vec![
SpreadsheetCell::Int(3),
SpreadsheetCell::Float(3.14),
SpreadsheetCell::Text(String::from("๊ฐ๋๋ค๋ผ")),
];
}
- ์ด๊ฑฐ์๋ฅผ ์ด์ฉํด ํ๋์ ๋ฒกํฐ์ ๋ค๋ฅธ ํ์ ์ ๊ฐ ์ ์ฅ
- ๋ฒกํฐ์ ์ด๋ค ๊ฐ์ ์ ์ฅํ ์ ์๋์ง ๋ช
์ํ ์ ์์
- ๋ฌ์คํธ๋ ์ปดํ์ผ ์์ ์ ๋ฒกํฐ์ ์ด๋ค ํ์ ์ ๊ฐ์ด ์ ์ฅ๋ ์ง ์์์ผ ํ๋ฏ๋ก ๋น์ฐํ ๊ฐ๊ฐ์ ๊ฐ์ ์ ์ฅํ๊ธฐ ์ํด ์ด๋ ์ ๋์ ํ ๋ฉ๋ชจ๋ฆฌ๊ฐ ํ์ํ์ง๋ ์ ํํ ํ๋จํจ
- ํ๋ก๊ทธ๋จ์ด ๋ฒกํฐ์ ์ ์ฅํด์ผ ํ ํ์ ๋ค์ ํ๋ก๊ทธ๋จ์ ์์ฑํ๋ ์์ ์ ์๋ฒฝํ ์ ์ ์๋ค๋ฉด ์ด๊ฑฐ์๋ฅผ ์ด์ฉํ๋ ๋ฐฉ๋ฒ์ ๋ณ๋ค๋ฅธ ๋์์ด ๋์ง ์์
2๏ธโฃ String
ํ์
์ UTF-8
ํ์์ ํ
์คํธ ์ ์ฅํ๊ธฐ
- ๋ฌ์คํธ์ ๋ฌธ์์ด์ ์ผ๋ฐ์ ์ผ๋ก ๊ฐ๋ฐ์๋ค์ด ์๊ณ ์๋ ๊ฒ๋ณด๋ค ๋ ๋ณต์กํ ๋ฐ์ดํฐ ๊ตฌ์กฐ์ด๋ฉฐ,
UTF-8
ํ์์ผ๋ก ์ ์ฅ๋จ - ๋ฌ์คํธ์ ๋ฌธ์์ด์
๋ฐ์ดํธ(bytes)
์ ์ปฌ๋ ์ ์ผ๋ก ๊ตฌํ๋์ด ์์ ๋ฟ๋ง ์๋๋ผ, ์ด ๋ฐ์ดํธ๋ฅผ ๋ฌธ์์ด๋ก ์ฒ๋ฆฌํ ๋ ์ ์ฉํ ์ฌ๋ฌ ๊ฐ์ง ๋ฉ์๋๋ฅผ ์ ๊ณตํจ
๐ค ๋ฌธ์์ด์ด๋ ๋ฌด์์ผ๊น?
- ๋ฌ์คํธ๋ ์ธ์ด์ ๋ช
์ธ ์์์ ์ค์ง ํ ๊ฐ์ง์ ๋ฌธ์์ด ํ์
, ์ฆ ๋ฌธ์์ด ์ฌ๋ผ์ด์ค์ธ
str
ํ์ ๋ง์ ์ง์ํจ- ์ฃผ๋ก ๊ฐ์ ๋์ฌํ
&str
์ ํํ๋ก ๋ณด๊ฒ ๋ ๊ฒ์ - ์ด๋๊ฐ์
UTF-8
ํ์์ผ๋ก ์ธ์ฝ๋ฉ๋์ด ์ ์ฅ๋ ๋ฌธ์์ด์ ๋ํ ์ฐธ์กฐ - ๋ฌธ์์ด ๋ฆฌํฐ๋ด์ ํ๋ก๊ทธ๋จ์ ์ปดํ์ผํ ๋ฐ์ด๋๋ฆฌ ๊ฒฐ๊ณผ ํ์ผ์ ํฌํจ๋๋ฏ๋ก ๋ฌธ์์ด ์ฌ๋ผ์ด์ค์
- ์ฃผ๋ก ๊ฐ์ ๋์ฌํ
String
ํ์ ์ ์ธ์ด์ ๋ช ์ธ์ ์ ์๋ ๊ฒ์ด ์๋๋ผ ๋ฌ์คํธ์ ํ์ค ๋ผ์ด๋ธ๋ฌ๋ฆฌ๊ฐ ์ ๊ณตํ๋ ํ์- ๊ธธ์ด ์กฐ์ ์ด๋ ๋ด์ฉ ๋ณ๊ฒฝ, ์์ ๋ฑ์ด ๊ฐ๋ฅํ๋ฉฐ
UTF-8
ํ์์ผ๋ก ์ธ์ฝ๋ฉ๋ ๋ฌธ์์ด ํ์
- ๊ธธ์ด ์กฐ์ ์ด๋ ๋ด์ฉ ๋ณ๊ฒฝ, ์์ ๋ฑ์ด ๊ฐ๋ฅํ๋ฉฐ
- ๋ฌ์คํธ์ ํ์ค ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋
OsString
,OsStr
,CString
,CStr
๊ณผ ๊ฐ์ ๋ค๋ฅธ ์ข ๋ฅ์ ๋ฌธ์์ด ํ์ ๋ ์ ๊ณต- ์ด ๋ฌธ์์ด ํ์ ๋ค์ ๋ค๋ฅธ ์ธ์ฝ๋ฉ ํ์์ ํ ์คํธ๋ฅผ ์ ์ฅํ๊ฑฐ๋ ๋ฉ๋ชจ๋ฆฌ์์ ๋ค๋ฅธ ํํ๋ก ํํ๋๊ธฐ๋ ํจ
๐ค ์ ๋ฌธ์์ด ์์ฑํ๊ธฐ
String
ํ์ ์Vec<T>
ํ์ ์ด ์ง์ํ๋ ๋๋ถ๋ถ ์์ ์ ์ง์ํจ
fn main() {
let mut s = String::new();
}
- ์๋ก์ด ๋น ๋ฌธ์์ด์ ์์ฑํด ๋ณ์ s์ ํ ๋น
fn main() {
let data = "First String";
let s = data.to_string();
// let s = "First String".to_string();
}
- ๋ฌธ์์ด ์์ฑ ์ ์ด๊น๊ฐ ์ง์
Display
ํฌ๋ ์ดํธ๋ฅผ ๊ตฌํํ ๋ชจ๋ ํ์ ์์ ์ฌ์ฉํ ์ ์๋to_string
ํจ์ ํ์ฉ
fn main() {
let mut s = String::from("First String");
}
- ๋ฌธ์์ด ๋ฆฌํฐ๋ด๋ก
String
ํ์ ์์ฑ ์from
ํจ์ ์ด์ฉ String::from
๊ณผto_string
์ ๊ฐ์ ์์ ์ ์ํํ๋ฏ๋ก ์์ ์ ์คํ์ผ์ ๋ฐ๋ผ ์ ํํด ์ฌ์ฉํ๋ฉด ๋จ
๐ค ๋ฌธ์์ด ์์ ํ๊ธฐ
(1) push_str
๊ณผ push
๋ฉ์๋๋ฅผ ์ด์ฉํด ๋ฌธ์์ด ๋ง๋ถ์ด๊ธฐ
fn main() {
let mut s = String::from("foot");
s.push_str("ball");
println!("{s}");
}
// Result
// football
push_str
๋ฉ์๋๋ ๋ฌธ์์ด ์ฌ๋ผ์ด์ค๋ฅผString
์ ๋ง๋ถ์push_str
๋ฉ์๋๊ฐ ๋ฌธ์์ด ์ฌ๋ผ์ด์ค๋ฅผ ์ด์ฉํ๋ ์ด์ ๋ ๋งค๊ฐ๋ณ์์ ์์ ๊ถ์ ๊ฐ์ง ํ์๊ฐ ์๊ธฐ ๋๋ฌธ
fn main() {
let mut s1 = String::from("foot");
let s2 = "ball";
s1.push_str(s2);
println!("s1: {s1}\ns2: {s2}");
}
// Result
// s1: football
// s2: ball
push_str
๋ฉ์๋๊ฐ ๋ณ์ s2์ ๋ํ ์์ ๊ถ์ ๊ฐ๊ฒ ๋๋ค๋ฉด ์ถ๋ ฅ๋ฌธ์์ ๋ณ์ s2๋ ์ ํจํ์ง ์๊ฒ ๋จ
fn main() {
let mut s = String::from("coffe");
s.push('e');
println!("{s}");
}
// Result
// coffee
push
๋ฉ์๋๋ ํ๋์๋ฌธ์(character)
๋ฅผ ๋งค๊ฐ๋ณ์๋ก ์ ๋ฌ๋ฐ์String
์ ์ถ๊ฐ
(2) +
์ฐ์ฐ์๋ format!
๋งคํฌ๋ก๋ฅผ ์ด์ฉํ ๋ฌธ์์ด ์ฐ๊ฒฐ
fn main() {
let s1 = String::from("Football");
let s2 = String::from(" Manager");
let s3 = s1 + &s2;
println!("{s3}");
}
// Result
// Football Manager
- ๋ณ์ s1์ ์ ํจํ์ง ์์
+
์ฐ์ฐ์๋ฅผ ์ฌ์ฉํ๋ฉด ๋ด๋ถ์ ์ผ๋กadd
๋ฉ์๋๊ฐ ํธ์ถ๋จfn add(self, s: &str) -> String {
- ํ์ค ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋
add
๋ฉ์๋๋ฅผ ์ ๋ค๋ฆญ์ ์ด์ฉํด ์ ์ธํจ - ํด๋น ์๊ทธ๋์ฒ๋
String
์ ์ด์ฉํดadd
๋ฉ์๋๋ฅผ ํธ์ถํ ๋ ์ ๋ค๋ฆญ ํ์ ์ด ์ค์ ์ฌ์ฉํ ํ์ ์ผ๋ก ์นํ๋ ์ดํ์ ์๊ทธ๋์ฒ์ - ๋ ๋ฒ์งธ ๋ฌธ์์ด์ ์ฐธ์กฐ ๋ฅผ ์ฒซ ๋ฒ์งธ ๋ฌธ์์ด์ ์ถ๊ฐํ๊ณ
String
ํ์ ์ ๋ฆฌํดํจ add
๋ฉ์๋์ ๋งค๊ฐ๋ณ์ s๊ฐ ์ฐธ์กฐ ํ์์ด๋ฏ๋กString
์๋ ์ค์ง&str
ํ์ ์ ๊ฐ๋ง ์ถ๊ฐ ๊ฐ๋ฅํ๋ฉฐ ๋ ๊ฐ์String
๊ฐ์ ๊ฒฐํฉํ ์ ์์- ์ ์ฝ๋์์ ๋ณ์ s2์ ํ์
์
&String
์ธ๋ฐ ๋งค๊ฐ๋ณ์๋ก ์ ๋ฌํ ์ ์์๋ ์ด์ ๋ ์ปดํ์ผ๋ฌ๊ฐ&String
์ธ์๋ฅผ&str
ํ์ ์ผ๋ก ๋ณํํ๊ธฐ ๋๋ฌธ add
๋ฉ์๋ ํธ์ถ ์ ๋ฌ์คํธ๋๊ฐ์ ์ญ์ฐธ์กฐ(deref coercion)
๋ฅผ ์ด์ฉํ์ฌ&s2
๋ฅผ&s2[..]
๋ก ๋ณํํจ
- ํ์ค ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋
- ์ฆ, s1์ ์์ ๊ถ์ ํ๋ณดํ ํ s2์ ๊ฐ์ ๋ณต์ฌํด์ ๋ง๋ถ์ธ ํ ๊ทธ ๊ฒฐ๊ด๊ฐ์ ๋ํ ์์ ๊ถ์ ๋ฆฌํดํ๋ ๊ฒ์
fn main() {
let s1 = String::from("one");
let s2 = String::from("two");
let s3 = String::from("three");
// let add_s = s1 + "-" + &s2 + "-" + &s3;
let format_s = format!("{}-{}-{}", s1, s2, s3);
println!("{format_s}");
}
// Result
// one-two-three
- ๋ฌธ์์ด์ ์ฌ๋ฌ ๊ฐ ๊ฒฐํฉํ ๋,
+
์ฐ์ฐ์๋ ๊ทธ๋ค์ง ํจ์จ์ ์ด์ง ๋ชปํ ์ ์์ format!
๋งคํฌ๋ก๋println!
๋งคํฌ๋ก์ ์์ ํ ๊ฐ์ ๋ฐฉ์์ผ๋ก ๋์ํ์ง๋ง, ํ๋ฉด์ ๊ฒฐ๊ณผ๋ฅผ ์ถ๋ ฅํ๋ ๋์ ๊ฒฐํฉ๋String
๊ฐ์ ๋ฆฌํดํจformat!
๋งคํฌ๋ก๋ ๊ฐ๋ ์ฑ์ด ์ข์ ๋ฟ ์๋๋ผ ๋งค๊ฐ๋ณ์์ ์์ ๊ถ๋ ์์
๐ค ๋ฌธ์์ด์ ์ธ๋ฑ์ค
- ๋ค๋ฅธ ํ๋ก๊ทธ๋๋ฐ ์ธ์ด์์๋ ๋ฌธ์์ด์ ์ ์ฅ๋ ๊ฐ๋ณ ๋ฌธ์๋ฅผ ์ธ๋ฑ์ค๋ฅผ ์ด์ฉํด ์ ๊ทผํ ์ ์์
- ๋ฌ์คํธ์์๋ ์ธ๋ฑ์ค๋ฅผ ์ด์ฉํด
String
๊ฐ์ ์ผ๋ถ์ ์ ๊ทผํ๋ ค ํ๋ฉด ์๋ฌ๊ฐ ๋ฐ์ํจ - ๋ฌ์คํธ์ ๋ฌธ์์ด์ ์ธ๋ฑ์ค๋ฅผ ์ง์ํ์ง ์์
(1) ๋ฌธ์์ด์ ๋ด๋ถ
String
์Vec<u8>
ํ์ ์ ํ ๋ฒ ๊ฐ์ผ ํ์ ์
let len = String::from("Hello").len();
// Result
// 5
- ๋ณ์ len์ ๊ฐ์ 5
- ๋ฒกํฐ์ ์ ์ฅ๋ ๋ฌธ์์ด 'Hello' ์ ๊ธธ์ด๊ฐ 5bytes
UTF-8
๋ก ์ธ์ฝ๋ฉ๋ ๋ฌธ์๋ค์ ํ ๊ธ์๋น 1byte
let len = String::from("์๋
ํ์ธ์").len();
- ๋ฌ์คํธ์์ ์ด ๋ฌธ์์ด์ ๊ธธ์ด๋ 15
- ํด๋น ๋ฌธ์์ด์
UTF-8
๋ก ์ธ์ฝ๋ฉํ๋ฉด 15bytes ์ฌ์ฉ- ๋ฌธ์์ด ์ ์ ๋์ฝ๋์ ์ค์นผ๋ผ๊ฐ์ 3bytes ๊ณต๊ฐ์ ์ฌ์ฉํ๊ธฐ ๋๋ฌธ
- ๋ฌธ์์ด์ ๋ฐ์ดํธ์ ์ธ๋ฑ์ค๋ก ์ ๊ทผํ๋ฉด ์ฌ๋ฐ๋ฅธ ์ ๋์ฝ๋ ์ค์นผ๋ผ๊ฐ์ ๊ฐ์ ธ์ค๊ธฐ๊ฐ ๋ถ๊ฐ๋ฅํ ์ ์์
let s = String::from("์๋
ํ์ธ์");
let ans = &s[0];
- ํด๋น ๋ฌธ์์ด์
UTF-8
ํ์์ผ๋ก ์ธ์ฝ๋ฉํ๋ฉด ์ฒซ ๋ฒ์งธ ๋ฐ์ดํธ๋ 236์ด๊ณ ๋ ๋ฒ์งธ ๋ฐ์ดํธ๋ 149 - ๋ฌ์คํธ๋ ์ธ๋ฑ์ค 0์ ํตํด ์ ์ ์๋ ๊ฐ์ ์ฒซ ๋ฒ์งธ ๋จ์ด๊ฐ ์๋ ๋ฐ์ดํธ๊ฐ 236๋ฟ์
- ๋๋ฌธ์ ๋ฌ์คํธ๋ ์ด๋ฌํ ์ฝ๋๋ฅผ ์ปดํ์ผํ์ง ์์
(2) ๋ฐ์ดํธ์ ์ค์นผ๋ผ๊ฐ, ๊ทธ๋ฆฌ๊ณ ๊ทธ๋ํ ํด๋ฌ์คํฐ
- ๋ฌ์คํธ ๊ด์ ์์ ๋ณผ ๋ ๋ฌธ์์ด์ ํฌ๊ฒ
๋ฐ์ดํธ(bytes)
,์ค์นผ๋ผ๊ฐ(scalar values)
,๊ทธ๋ํ ํด๋ฌ์คํฐ(grapheme clusters, ์ฐ๋ฆฌ๊ฐ ๋ฌธ์๋ผ๊ณ ๋ถ๋ฅด๋ ๊ฒ์ ๊ฐ์ฅ ๊ฐ๊น์ด ๊ฒ)
๋ฑ ์ธ ๊ฐ์ง๋ก ๊ตฌ๋ถํจ- ๊ทธ๋ํ์ด๋, ์ด๋ค ์ธ์ด์ ์ฒ ์ ์ฒด๊ณ์์ ๊ฐ์ฅ ์์ ๋จ์๋ฅผ ์๋ฏธํจ. ์ํ๋ฒณ์ ๊ฒฝ์ฐ ๊ฐ ์๋ชจ๊ฐ ์ด์ ํด๋นํจ.
- ํ๊ธ '์๋
ํ์ธ์' ์
u8
๊ฐ๋ค[236, 149, 136, 235, 133, 149, 237, 149, 152, 236, 132, 184, 236, 154, 148]
- ์ด 15๊ฐ์ ๋ฐ์ดํธ๊ฐ์ด ์ปดํจํฐ๊ฐ ์ต์ข ์ ์ผ๋ก ์ด ๋ฐ์ดํฐ๋ฅผ ์ ์ฅํ๋ ํํ
- 15๊ฐ์ ๋ฐ์ดํธ๊ฐ์ ๋ฌ์คํธ์
char
ํ์ ์ธ ์ ๋์ฝ๋ ์ค์นผ๋ผ๊ฐ์ผ๋ก ํํ['์', '๋ ', 'ํ', '์ธ', '์']
- ์ด 5๊ฐ์
char
๊ฐ
- 15๊ฐ์ ๋ฐ์ดํธ๊ฐ์ ๊ทธ๋ํ ํด๋ฌ์คํฐ๋ก ํํ
["์", "๋ ", "ํ", "์ธ", "์"]
- ๋ฌ์คํธ๊ฐ
String
ํ์ ์์ ์ธ๋ฑ์ค ์ฌ์ฉ์ ์ง์ํ์ง ์๋ ๋ง์ง๋ง ์ด์- ์ธ๋ฑ์ค ์ฒ๋ฆฌ์๋ ํญ์ ์ผ์ ํ ์๊ฐ($O(1)$)์ด ์์๋์ด์ผ ํ์ง๋ง
String
ํ์ ์ ๋ํด์๋งํผ์ ์ผ์ ํ ์ฑ๋ฅ์ ๋ณด์ฅํ ์ ์์ - ๋ฌ์คํธ๋ ์ ํจํ ๋ฌธ์๋ฅผ ํ์ ํ๊ธฐ ์ํด ์ฝํ ์ธ ๋ฅผ ์ฒ์๋ถํฐ ์ค์บํด์ผ ํ๊ธฐ ๋๋ฌธ
- ์ธ๋ฑ์ค ์ฒ๋ฆฌ์๋ ํญ์ ์ผ์ ํ ์๊ฐ($O(1)$)์ด ์์๋์ด์ผ ํ์ง๋ง
๐ค ๋ฌธ์์ด ์ฌ๋ผ์ด์ค ํ๊ธฐ
- ๋ฌธ์์ด์ ๋ํ ์ธ๋ฑ์ฑ ์์ ์ ์ํฉ์ ๋ฐ๋ผ ๊ฒฐ๊ณผ ํ์ ์ด ํ๋์ ๋ฐ์ดํธ๊ฐ, ํ๋์ ๋ฌธ์, ํ๋์ ๊ทธ๋ํ ํด๋์คํฐ ํน์ธ ํ๋์ ๋ฌธ์์ด ์ฌ๋ผ์ด์ค ์ค ํ๋๊ฐ ๋ ์ ์์ด ๋ช ํํ์ง ์์
- ์ธ๋ฑ์ค๋ฅผ ์ด์ฉํด ๋ฌธ์์ด ์ฌ๋ผ์ด์ค๋ฅผ ์์ฑํ๋ ค๋ฉด
[]
๋ฅผ ์ด์ฉํด ๋ฌธ์์ด ์ฌ๋ผ์ด์ค์ ์ ์ฅํ ํน์ ๋ฐ์ดํธ ์ ๋ฒ์๋ฅผ ๋ช ํํ ์ง์ ํด์ผ ํจ
fn main() {
let s = String::from("์๋
ํ์ธ์");
println!("{}", &s[0..3]);
}
// Result
// ์
- ๋ณ์ s๋ ๋ฌธ์์ด์ ์ฒ์ 3bytes ๊ฐ์ ์ ์ฅํ๋
&str
ํ์ &s[0..1]
๋ก ์ฝ๋๋ฅผ ์์ฑํ๊ฒ ๋๋ฉด ๋ฒกํฐ์ ์ ํจํ์ง ์์ ์ธ๋ฑ์ค๋ก ์ ๊ทผํ ๋์ ๋์ผํ๊ฒ ํจ๋์ด ๋ฐ์ํ๊ฒ ๋จ
๐ค ๋ฌธ์์ด์ ์ํํ๋ ๋ฉ์๋
fn main() {
let s = String::from("์๋
ํ์ธ์");
for c in s.chars() {
println!("{c}");
}
}
// Result
// ์
// ๋
// ํ
// ์ธ
// ์
- ๊ฐ๋ณ ์ ๋์ฝ๋ ์ค์นผ๋ผ๊ฐ์ ์กฐ์ํด์ผ ํ๋ค๋ฉด
chars
๋ฉ์๋ ์ฌ์ฉ - ์ ํจํ ์ ๋์ฝ๋ ์ค์นผ๋ผ๊ฐ์ 1byte๋ณด๋ค ํฐ ๊ฐ์ผ๋ก ๊ตฌ์ฑ๋จ
chars
๋ฉ์๋๋ ๋ฌธ์์ด์char
ํ์ ์ผ๋ก ๋ถ๋ฆฌํจ
fn main() {
let s = String::from("์๋
ํ์ธ์");
for b in s.bytes() {
println!("{b}");
}
}
bytes
๋ฉ์๋๋ ๋ฌธ์์ด์ ๊ฐ ๋ฐ์ดํธ๋ฅผ ๋ฆฌํดํจ
3๏ธโฃ ํค์ ๊ฐ์ ์ ์ฅํ๋ ํด์ ๋งต
HashMap<K, V>
ํ์ ์K
ํ์ ์ ํค์V
ํ์ ์ ๊ฐ์ ๋งคํํ์ฌ ์ ์ฅ- ์ ์ฌํ ํํ์ ๋ฐ์ดํฐ ๊ตฌ์กฐ
- ํด์, ๋งต, ๊ฐ์ฒด, ํด์ ํ ์ด๋ธ(hash table), ๋์ ๋๋ฆฌ(dictionary), ์ฐ๊ด ๋ฐฐ์ด(associative array) ๋ฑ
- ํด์ ๋งต์ ๋ฒกํฐ์ฒ๋ผ ์ธ๋ฑ์ค๋ฅผ ์ด์ฉํ๋ ๊ฒ์ด ์๋๋ผ ์ด๋ค ํ์ ์ด๋ ๊ด๊ณ์์ด ํค๋ฅผ ์ด์ฉํ์ฌ ๋ฐ์ดํฐ๋ฅผ ์กฐํํ๊ณ ์ ํ ๋ ์ ์ฉ
๐ค ์๋ก์ด ํด์ ๋งต ์์ฑํ๊ธฐ
use std::collections::HashMap;
fn main() {
let mut scores = HashMap::new();
scores.insert(
String::from("Blue"),
20
);
scores.insert(
String::from("Yellow"),
50
);
println!("{:#?}", scores);
}
// Result
// {
// "Yellow": 50,
// "Blue": 20,
// }
new
ํจ์๋ก ๋น ํด์ ๋งต ์์ฑinsert
ํจ์๋ก ์๋ก์ด ํค์ ๊ฐ์ ์ถ๊ฐ- ํด์ ๋งต์ ์ฌ์ฉ๋น๋๊ฐ ๋ฎ์ ํ๋ ๋ฅ๋๋ฅผ ํตํด ์๋์ผ๋ก ํ์ฌ ๋ฒ์๋ก ๊ฐ์ ธ์ค๋ ๊ธฐ๋ฅ์ด ํฌํจ๋์ด ์์ง ์์ผ๋ฉฐ, ํ์ค ๋ผ์ด๋ธ๋ฌ๋ฆฌ์ ์ง์๋ ๋น์ฝํจ
- ํด์ ๋งต์ ๋ฒกํฐ์ ๋ง์ฐฌ๊ฐ์ง๋ก ๋ฐ์ดํฐ๋ฅผ ํ ๋ฉ๋ชจ๋ฆฌ์ ์ ์ฅํ๋ฉฐ, ๋ชจ๋ ํค์ ๋ชจ๋ ๊ฐ์ ํ์ ์ด ๊ฐ์์ผ ํจ
use std::collections::HashMap;
fn main() {
let teams = vec![
String::from("Blue"),
String::from("Yellow")
];
let score = vec![20, 50];
let scores: HashMap<_, _> = teams.iter()
.zip(score.iter()).collect();
println!("{:#?}", scores);
}
// Result
// {
// "Blue": 20,
// "Yellow": 50,
// }
- ํค์ ๊ฐ์ ๊ฐ์ง๊ณ ์๋ ํํ์ ๋ฒกํฐ์ ๋ํด
collect
๋ฉ์๋๋ฅผ ํธ์ถ collect
๋ฉ์๋- ์ฌ๋ฌ ๊ฐ์ง ์ข ๋ฅ์ ์ปฌ๋ ์ ์ผ๋ก๋ถํฐ ๋ฐ์ดํฐ๋ฅผ ์์งํจ
- ์ฌ๋ฌ ๊ฐ์ง ๋ฐ์ดํฐ ๊ตฌ์กฐ๋ฅผ ์์ฑํ ์ ์์ผ๋ฏ๋ก ๊ทธ ์ค ์ด๋ค ํ์ ์ ์์ฑํ ๊ฒ์ธ์ง ๋ช ์ํ๋ ํ์ ์ ๋ ธํ ์ด์ ํ์
- ํ์
์ ๋
ธํ
์ด์
์ค ๋งค๊ฐ๋ณ์์ ๋ํด์
๋ฐ์ค(_)
์ ์ฌ์ฉํ์ฌ ๋ฒกํฐ์ ๋ฐ์ดํฐ ํ์ ์ ์ด์ฉํด ํค์ ๊ฐ์ ํ์ ์ ์์์ ์ ์ถํ ์ ์๋๋ก ํจ
fn main() {
let teams = vec![
String::from("Blue"),
String::from("Yellow")
];
let score = vec![20, 50];
let scores = teams.iter().zip(score.iter());
for i in scores {
println!("{:#?}", i);
}
}
// Result
// (
// "Blue",
// 20,
// )
// (
// "Yellow",
// 50,
// )
zip
๋ฉ์๋๋ก๋ ํํ์ ๋ฒกํฐ๋ฅผ ์์ฑํ ์ ์์
๐ค ํด์ ๋งต๊ณผ ์์ ๊ถ
i32
์ฒ๋ผCopy
ํธ๋ ์ดํธ๋ฅผ ๊ตฌํํ๋ ํ์ ์ ๊ฐ๋ค์ด ํด์ ๋งต์ผ๋ก ๋ณต์ฌ๋จString
์ฒ๋ผ ๊ฐ์ ์์ ํ๋ ํ์ ์ ๊ฐ์ด ํด์ ๋งต์ผ๋ก ์ด๋ํ๋ฉฐ, ํด์ ๋งต์ด ๊ทธ ๊ฐ๋ค์ ์์ ๊ถ์ ๊ฐ๊ฒ ๋จ- ํด์ ๋งต์ ๊ฐ์ ์ฐธ์กฐ๋ฅผ ์ถ๊ฐํ๋ฉด ๊ทธ ๊ฐ์ ํด์ ๋งต์ผ๋ก ์ด๋ํ์ง ์์
- ์ฐธ์กฐ๊ฐ ๊ฐ๋ฆฌํค๋ ๊ฐ์ ํด์ ๋งต์ด ์ ํจํ ๋ฒ์์ ์๋ ๋์ ํจ๊ป ์ ํจํด์ผ ํจ
๐ค ํด์ ๋งต์ ๊ฐ์ ์ ๊ทผํ๊ธฐ
use std::collections::HashMap;
fn main() {
let mut scores = HashMap::new();
scores.insert(String::from("Blue"), 20);
scores.insert(String::from("Yellow"), 50);
let score = scores.get(
&String::from("Blue")
);
println!("{:#?}", score);
}
// Result
// Some(
// 20,
// )
get
๋ฉ์๋์ ํค๋ฅผ ์ ๋ฌํ๋ฉด ๊ฐ์ ์ ๊ทผ ๊ฐ๋ฅget
๋ฉ์๋๋Option<&V>
ํ์ ์ ๋ฆฌํดํจ- ์ฆ, ํด์ ๋งต์ ํค์ ๋ํ ๊ฐ์ด ์กด์ฌํ์ง ์์ผ๋ฉด
None
์ ๋ฆฌํด
- ์ฆ, ํด์ ๋งต์ ํค์ ๋ํ ๊ฐ์ด ์กด์ฌํ์ง ์์ผ๋ฉด
use std::collections::HashMap;
fn main() {
let mut scores = HashMap::new();
scores.insert(String::from("Blue"), 20);
scores.insert(String::from("Yellow"), 50);
for (key, value) in &scores {
println!("{key} : {value}");
}
}
// Result
// Yellow : 50
// Blue : 20
for
๋ฃจํ๋ฅผ ์ด์ฉํ ํด์ ๋งต ํค์ ๊ฐ์ ์ ์ํ ์ถ๋ ฅ- ํด์ ๋งต์ ํค์ ๊ฐ์ ์์ ์์์ ์์ ๋ก ์ถ๋ ฅํจ
๐ค ํด์ ๋งต ์์ ํ๊ธฐ
- ํด์ ๋งต์ ๊ฐ ํค์๋ ์ค์ง ํ๋์ ๊ฐ๋ง ํ ๋นํ ์ ์์
(1) ๊ฐ ๋ฎ์ด์ฐ๊ธฐ
- ํด์ ๋งต์ ํค์ ๊ฐ์ ์ถ๊ฐํ ํ ๊ฐ์ ํค์ ๋ค๋ฅธ ๊ฐ์ ์ถ๊ฐํ๋ฉด ํค์ ํ ๋น๋์๋ ๊ฐ์ด ๊ต์ฒด๋จ
(2) ํค์ ๊ฐ์ด ํ ๋น๋์ด ์์ง ์์ ๋๋ง ์ถ๊ฐํ๊ธฐ
- ํด์ ๋งต์ ๊ฐ์ ํ ๋น ์ฌ๋ถ๋ฅผ ํ์ธํ ํค๋ฅผ ๋งค๊ฐ๋ณ์๋ก ์ฌ์ฉํ๋
entry
๋ผ๋ ํน๋ณํ API๋ฅผ ์ ๊ณตํจ entry
๋ฉ์๋์ ๋ฆฌํด๊ฐ์ ๊ฐ์ด ์กด์ฌํ๋์ง ์๋ ค์ฃผ๋Entry
์ด๊ฑฐ์์
use std::collections::HashMap;
fn main() {
let mut scores = HashMap::new();
scores.insert(String::from("Blue"), 20);
scores.entry(String::from("Yellow")).or_insert(50);
scores.entry(String::from("Blue")).or_insert(50);
println!("{:#?}", scores);
}
// Result
// {
// "Blue": 20,
// "Yellow": 50,
// }
Entry
์ด๊ฑฐ์์or_insert
๋ฉ์๋๋ ํค๊ฐ ์กด์ฌํ๋ฉด ๊ทธ ํค์ ์ฐ๊ฒฐ๋ ๊ฐ์ ๋ํ ๊ฐ๋ณ ์ฐธ์กฐ๋ฅผ ๋ฆฌํด- ์กด์ฌํ์ง ์์ ์ ๋งค๊ฐ๋ณ์๋ก ์ ๋ฌํ ํค์ ์๋ก์ด ๊ฐ์ ์ถ๊ฐํ ํ ์ด ์ ๊ฐ์ ๋ํ ๊ฐ๋ณ ์ฐธ์กฐ ๋ฆฌํด
(3) ๊ธฐ์กด ๊ฐ์ ๋ฐ๋ผ ๊ฐ ์์ ํ๊ธฐ
use std::collections::HashMap;
fn main() {
let s = "hello world pretty wonderful world";
let mut map = HashMap::new();
for word in s.split(' ') {
let count = map.entry(word).or_insert(0);
*count += 1;
}
println!("{:#?}", map);
}
// Result
// {
// "wonderful": 1,
// "pretty": 1,
// "hello": 1,
// "world": 2,
// }
- ํ ์คํธ ์์์ ๊ฐ ๋จ์ด๊ฐ ๋ช ๋ฒ ์ฌ์ฉ๋์๋์ง ์ธ๋ ์ฝ๋
or_insert
๋ฉ์๋๋ํค์ ํ ๋น๋ ๊ฐ์ ๋ํ ๊ฐ๋ณ ์ฐธ์กฐ(&mut V)
๋ฅผ ๋ฆฌํด- ํด๋น ๊ฐ๋ณ ์ฐธ์กฐ๋ฅผ count ๋ณ์์ ์ ์ฅํ์ผ๋ฏ๋ก ์ด ๋ณ์์ ์ ๊ฐ์ ํ ๋นํ๋ ค๋ฉด
์ ์คํฐ๋ฆฌ์คํฌ(*)
๋ฅผ ์ด์ฉํด count ๋ณ์๋ฅผ ์ญ์ฐธ์กฐํด์ผ ํจ - ๊ฐ๋ณ ์ฐธ์กฐ๋
for
๋ฃจํ๊ฐ ๋๋๋ฉด ๋ฒ์ ๋ฐ์ผ๋ก ๋๊ฐ๊ฒ ๋๋ฏ๋ก ๊ฐ ๋์ฌ ๊ท์น์ ์๋ฐํ์ง ์์ผ๋ฉฐ ์์ ํ๊ฒ ๊ฐ์ ๋ณ๊ฒฝํ ์ ์์
- ํด๋น ๊ฐ๋ณ ์ฐธ์กฐ๋ฅผ count ๋ณ์์ ์ ์ฅํ์ผ๋ฏ๋ก ์ด ๋ณ์์ ์ ๊ฐ์ ํ ๋นํ๋ ค๋ฉด
๐ค ํด์ ํจ์
- ํด์ ๋งต์ ์ํธํ์ ์ผ๋ก ๊ฐ๋ ฅํ ํด์ ํจ์๋ฅผ ์ด์ฉํ์ฌ
์๋น์ค ๊ฑฐ๋ถ(DoS, Denial of Service)
๊ณต๊ฒฉ์ ๋ฐฉ์งํ ์ ์์ - ๊ฐ์ฅ ๋น ๋ฅธ ํด์ฑ ์๊ณ ๋ฆฌ์ฆ์ ์ฌ์ฉํ์ง๋ ์์ง๋ง, ์ด๋ ์ ๋์ ์ฑ๋ฅ์ ํฌ์ํ๋ฉด์ ๋ณด์์ ํฅ์์ํค๋ ๊ฒ์ ํ์ํจ
Summary
- ๋ฒกํฐ, ๋ฌธ์์ด, ํด์ ๋งต์ ๋๋ถ๋ถ ํ๋ก๊ทธ๋จ์ด ๋ฐ์ดํฐ๋ฅผ ์ ์ฅํ๊ณ ์ฝ๊ณ ์์ ํ๋ ๋ฐ ํ์ํ ๋ฐฉ๋ํ ๊ธฐ๋ฅ์ ์ ๊ณตํจ
728x90
๋ฐ์ํ
'Development Study > Rust' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
Comments