์ผ | ์ | ํ | ์ | ๋ชฉ | ๊ธ | ํ |
---|---|---|---|---|---|---|
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 |
- ํ์ด์ฌ ์ฑ๋ฆฐ์ง
- ์ค๋ผํดDB
- ์๋ฐ ๊ธฐ์ด
- C
- OS
- java
- ๋ฐฑ์ค
- ํ์ด์ฌ
- Reversing
- Rust
- ubuntu
- Python challenge
- ๋ฐฑ์ค ๋ฌ์คํธ
- Operating System
- ์๊ณ ๋ฆฌ์ฆ
- ์ค๋ผํด
- ๋ฌ์คํธ ์์
- ์๋ฐ
- Python
- ์ด์์ฒด์
- ์๋ฐ ๊ฐ๋
- ํ์ด์ฌ ์ฒผ๋ฆฐ์ง
- data communication
- ์ฐ๋ถํฌ
- ๋ฐ์ดํฐ๋ฒ ์ด์ค
- ํ์ด์ฌ ์๊ณ ๋ฆฌ์ฆ
- ๋ฌ์คํธ
- ๋ฐ์ดํฐ ํต์
- ๋ฌ์คํธ ํ๋ก๊ทธ๋๋ฐ ๊ณต์ ๊ฐ์ด๋
- Database
- Today
- Total
IT’s Portfolio
[Rust] Start Rust (Day 5) - Common Programming Concepts [1] ๋ณธ๋ฌธ
[Rust] Start Rust (Day 5) - Common Programming Concepts [1]
f1r3_r41n 2023. 1. 3. 15:17๐ฆ Rust Day 5
๐ณ๏ธ Common Programming Concepts
keyword
: ๊ฐ๋ฐ์๊ฐ ์ฌ์ฉํ ์ ์๋ ์์ฝ ํค์๋ ์กด์ฌ -> ๋ค๋ฅธ ์ธ์ด์ ๊ฐ์
1๏ธโฃ ๋ณ์์ ๊ฐ๋ณ์ฑ
- ๋ฌ์คํธ๋ ๋ณ์์ ๋ถ๋ณ์ฑ(immutability)์ ๊ธฐ๋ณธ์ผ๋ก ํ๋ฉฐ, ๊ฒฝ์ฐ์ ๋ฐ๋ผ ํํผํ ์ ์์
- ๊ธฐ๋ณธ ๋ณ์ ์ ์ธ๋ฌธ
let x = 5;
์ ์ฌ์ฉํ์ ๋๋ ๋ถ๋ณ์ฑ ์ ์ฉ - ๋ณ์ ์์
mut
keyword ์ถ๊ฐ ์ ๊ฐ๋ณ ๋ณ์ ์ ์ธ ๊ฐ๋ฅlet mut x = 5;
- ๋์ฉ๋ ๋ฐ์ดํฐ ๊ตฌ์กฐ ์ฌ์ฉ ์ ๋ฐ์ดํฐ์ ์ธ์คํด์ค๋ฅผ ๊ฐ๋ณํ์ผ๋ก ์ ์ธํ๋ ๊ฒ์ด ์ ๋ฆฌ
- ์์ ์ฉ๋์ ๋ฐ์ดํฐ ๊ตฌ์กฐ ์ฌ์ฉ ์ ์๋ก์ด ์ธ์คํด์ค ์์ฑ ํ ํจ์ํ ํ๋ก๊ทธ๋๋ฐ ๊ธฐ๋ฒ์ ๊ฐ๊น๊ฒ ์ฝ๋ฉํ๋ ๊ฒ์ด ์ ๋ฆฌ
- ๊ธฐ๋ณธ ๋ณ์ ์ ์ธ๋ฌธ
๐ค ๋ณ์ vs ์์
์์์๋
mut
keyword ์ฌ์ฉ ๋ถ๊ฐ๋ฅ- ์์๋ ํญ์ ๋ถ๋ณ
let
keyword ๋์const
keyword ์ฌ์ฉํ์ฌ ์ ์ธ- ํ ๋นํ ๊ฐ์ ํ์ ์ ๋ฌด์กฐ๊ฑด ์ง์ ํ์ฌ์ผ ํจ => annotation
์ ์ญ ๋ฒ์๋ฅผ ๋น๋กฏํด ์ํ๋ ์ด๋ค ๋ฒ์ ๋ด์์๋ ์ ์ธ ๊ฐ๋ฅ
๋ฐ๋์ ์์ ํํ์์ ์ฌ์ฉํ์ฌ ๊ฐ์ ํ ๋น
- ํจ์ ํธ์ถ ๊ฒฐ๊ณผ๊ฐ์ด๋ ๊ธฐํ ๋ฐํ์ ์ฐ์ฐ์ผ๋ก ์ป์ ๊ฐ ์ฌ์ฉ ๋ถ๊ฐ๋ฅ
๋ฌ์คํธ์์๋ ์์ ์ด๋ฆ์ ๋๋ฌธ์ ๋ง ์ฌ์ฉํ๋ฉฐ snack case ๋ฅผ ๊ธฐ์ฉํ๋ค๋ ๊ท์น ์ฌ์ฉ
- ๋ฐ์ค์ ์ซ์ ๋ฆฌํฐ๋ด์ ๊ฐ๋ ์ฑ์ ๋์ด๊ธฐ ์ํด ์๋ฆฟ์ ๊ตฌ๋ถ ์ ์ฌ์ฉ ๊ฐ๋ฅ
์์๋ ํ๋ก๊ทธ๋จ ์คํ ์ค ์ ์ธ๋ ๋ฒ์ ๋ด์์ ํญ์ ์ ํจํ ๊ฐ
ํ๋ก๊ทธ๋จ ์ ์ฒด์์ ์ฌ์ฉํ๋ ํ๋์ฝ๋๋ ๊ฐ์ ์์๋ก ์ด๋ฆ์ ์ง์ ํ๋ ๊ฒ์ ๋งค์ฐ ๊ด์ฐฎ์ ์ ํ
const MAX_NUM: u32 = 100_000; fn main() { println!("Max_num: {}", MAX_NUM); } // Result // Max_num: 100000
๐ค ๋ณ์ ๊ฐ๋ฆฌ๊ธฐ (shadowing)
์ด๋ฏธ ์ ์ธํ ๋ณ์์ ์ด๋ฆ๊ณผ ๊ฐ์ ์ด๋ฆ์ ๋ณ์ ์ ์ธ ๊ฐ๋ฅ
- ์ด์ ์ ์ ์ธํ ๋ณ์๋ ์๋ก ์ ์ธํ ๋ณ์ ๋๋ฌธ์ ๊ฐ๋ ค์ง
- ๋ณ์ ์ด๋ฆ์ ์ฐธ์กฐํ๋ฉด ๋ ๋ฒ์งธ ๋ณ์์ ๊ฐ์ด ์ฌ์ฉ๋จ
let
keyword๋ฅผ ์ด์ฉํด ์ฌ์ ์ธ ์shadowing
shadowing
vsmut
keywordshadowing
์let
keyword ๋ฅผ ์ฌ์ฉํ๊ธฐ ๋๋ฌธ์ ๋ณ๊ฒฝ๋ ๊ฐ๋ ๋ถ๋ณlet
keyword ๋ฅผ ์ฌ์ฉํ ๋ ์๋ก์ด ๋ณ์๋ฅผ ์ ์ธํ๋ ๊ฒ์ด๋ฏ๋ก ์ด๋ฆ์ ๊ฐ์ง๋ง, ํ์ ์ ๋ค๋ฅธ ๋ณ์ ์ฌ์ฉ ๊ฐ๋ฅex) ์ฌ์ฉ์์๊ฒ ํน์ ํ ์คํธ ์ฌ์ด์ ์ฝ์ ํ๊ณ ์ถ์ ๊ฐฏ์๋งํผ ๊ณต๋ฐฑ์ ์ ๋ ฅํ๊ฒ ํ ํ ์ซ์๋ก ๋ณํ ์ฌ์ฉ ๊ฐ๋ฅ
fn main() { let spaces = " "; let spaces = spaces.len(); println!("๊ณต๋ฐฑ: {}", spaces); } // Result // ๊ณต๋ฐฑ: 6
fn main() { let mut spaces = " "; spaces = spaces.len(); println!("๊ณต๋ฐฑ: {}", spaces); } // Result // error[E0308]: mismatched types
2๏ธโฃ ๋ฐ์ดํฐ ํ์
- ๋ฌ์คํธ์ ๋ฐ์ดํฐ ํ์
์ ๋ ๊ฐ์ง ๋ถ๋ถ์งํฉ
- ์ค์นผ๋ผ(Scalar)
- ์ปดํ์ด๋(Compound)
- ๋ฌ์คํธ๋ ์ ์ ํ์
์ธ์ด
- ์ฆ, ์ปดํ์ผ ์์ ์ ๋ชจ๋ ๋ณ์์ ํ์ ์ด ๊ฒฐ์ ๋์ด์ผ ํจ
- ์ปดํ์ผ๋ฌ๋ ํ์ ์ถ๋ก ์ ํตํด ๋ณ์์ ํ ๋น๋ ๊ฐ์ด๋ ๋ณ์์ ์ฌ์ฉ์ ๋ณด๊ณ ์ค์ ํ์ ์์ธก
- ์ฌ๋ฌ ํ์
์ ์ฌ์ฉํ ์ ์์๋๋
ํ์ ์ ๋ ธํ ์ด์ (annotation)
์ ์ด์ฉํด ํ์ ์ ๋ช ์ํด์ฃผ์ด์ผ ํจ
๐ค Scalar Type
- ์ ์(integer)์ ๋ถ๋ ์์์ ์ซ์(floating point numbers), ๋ถ๋ฆฐ(booleans), ๋ฌธ์(characters) ๋ฑ ๋ค ๊ฐ์ง ์ข
๋ฅ์
Scalar Type
์ ์- โ๏ธ ์ ์ ํ์
- ์์์ ์ด ์๋ ์ซ์
- [์ ์ ํ์
]
ํฌ๊ธฐ ๋ถํธ O ๋ถํธ X 8bit i8 u8 16bit i16 u16 32bit i32 u32 64bit i64 u64 arch isize usize - ๋ถํธ๊ฐ ์๋ ํ์ ์ ํ ๋น๊ฐ์ด ์์๋ ์์์ผ ์ ์์ผ๋ฏ๋ก ์ด๋ฅผ ๊ตฌ๋ถํ๊ธฐ ์ํด ๋ถํธ๊ฐ ํ์ํจ
- ๋ถํธ๊ฐ ์๋ ์ซ์๋ 2์ ๋ณด์๋ก ํํ
- 2์ ๋ณด์ ์ ๋ฆฌ๊ธ
- ๋ถํธ๊ฐ ์๋ ํ์
๋ค์ $-(2^{n-1})$ ๊ณผ $2^{n-1}-1$ ์ฌ์๊ฐ๋ค์ ๋ณด๊ดํ ์ ์์
- n์ ๊ฐ ํ์ ์ ํฌ๊ธฐ๋ฅผ ๋ํ๋ด๋ ๋นํธ์ ๊ฐ์
isize
๋usize
๋ ํ์ฌ ํ๋ก๊ทธ๋จ์ด ์คํ์ค์ธ ์ปดํจํฐ์ ์ข ๋ฅ์ ๋ฐ๋ผ ๊ทธ ํฌ๊ธฐ๊ฐ ๋ฌ๋ผ์ง- [์ ์ ๋ฆฌํฐ๋ด]
์ซ์ ๋ฆฌํฐ๋ด Ex Decimal 98_222 Hex 0xff Octal 0o77 Binary 0b1111_0000 Byte(u8 ์ ์ฉ) b'A' - ๋ฐ์ดํธ ์ ์ธ ๋ชจ๋ ์ซ์ ๋ฆฌํฐ๋ด์๋ 57u8๊ณผ ๊ฐ์ด ํ์ ์ ๋ฏธ์ฌ(suffix)๋ฅผ ๋ถ์ผ ์ ์์
- ๋ฐ์ค๋ก ์๋ฆฟ์ ํํ ๊ฐ๋ฅ
- ์ ์์ ๊ธฐ๋ณธ ํ์
:
i32
- ์ผ๋ฐ์ ์ผ๋ก ๊ฐ์ฅ ๋น ๋ฅด๋ฉฐ 64bit ํ๋ซํผ์์๋ ๋น ๋ฆ
- isize๋ usize ํ์ ์ ์ปฌ๋ ์ ํ์ ์ ์ธ๋ฑ์ค ์ฐธ์กฐ ์ ์ฃผ๋ก ์ฌ์ฉ
- ์ ์ ์ค๋ฒํ๋ก์ฐ
- u8 ํ์ ์ ๋ณ์์ 255๊ฐ ๋๋ ๊ฐ์ ๋์ ํ๋ คํ๋ฉด ์ ์ ์ค๋ฒํ๋ก์ฐ๊ฐ ๋ฐ์ (integer overflow)
- ๋๋ฒ๊ทธ ๋ชจ๋๋ก ์ปดํ์ผํ๋ฉด ๋ฌ์คํธ๋ ์ ์ ์ค๋ฒํ๋ก์ฐ์ ๋ํ ๊ฒ์ฌ๋ฅผ ์ถ๊ฐํ์ฌ ๋ฐํ์์ ํ๋ก๊ทธ๋จ์์ ํจ๋์ด ๋ฐ์ํ์ง ์๋๋ก ํจ
- Panicking : ์๋ฌ๊ฐ ๋ฐ์ํด์ ํ๋ก๊ทธ๋จ์ด ์ค๋จ๋๋ ํ์
--release
ํ๋๊ทธ๋ฅผ ์ด์ฉํ์ฌ ๋ฆด๋ฆฌ์ฆ ๋ชจ๋๋ก ์ปดํ์ผ ํ ๊ฒฝ์ฐ ํจ๋์ ์ ๋ฐํ๋ ์ ์ ์ค๋ฒํ๋ก์ฐ์ ๋ํ ๊ฒ์ฌ๋ฅผ ์ถ๊ฐํ์ง ์์- ๋์ ์ค๋ฒํ๋ก์ฐ๊ฐ ๋ฐ์ํ๋ฉด ๋ ๊ฐ์ ๋ํ(Wrapping) ์ ์ถ๊ฐ
- Wrapping : ํ์ ์ ์ต๋๊ฐ๋ณด๋ค ํฐ ๊ฐ์ ํ์ ์ด ๊ฐ์ง ์ ์๋ ๊ฐ์ฅ ์์ ๊ฐ์ผ๋ก ๋๋ฌ์์
- ์ ์ ์ค๋ฒํ๋ก์ฐ์ ๋ํ ๋์์ ์์กดํ๋ ๊ฒ์ ์๋ฌ๋ก ํ๋จ. ๋ง์ผ, ๊ฐ์ ๋ช ์์ ์ผ๋ก ๋ํํ๊ณ ์ ํ๋ค๋ฉด ํ์ค lib์ Wrapping ํ์ ์ฌ์ฉ
- โ๏ธ ๋ถ๋ ์์์ ํ์
- f32์ f64
- ๊ฐ๊ฐ 32bit์ 64bit ํฌ๊ธฐ
- ์์ฆ ์ฌ์ฉํ๋ ๋๋ถ๋ถ CPU์์๋ f64๊ฐ f32๋งํผ ๋น ๋ฅด๊ณ ์ ํ๋๊ฐ ๋ ๋์ผ๋ฏ๋ก ๋ฌ์คํธ์ ๊ธฐ๋ณธ ํ์ ์ผ๋ก ๊ท์ ํจ
- f32 ํ์ ์ ๋จ์ ๋(single-precision) ๋ถ๋ ์์์ ํํ
- f64 ํ์ ์ ๋ฐฐ์ ๋(double-precision) ๋ถ๋ ์์์ ํํ
- f32์ f64
- โ๏ธ ์ฌ์น ์ฐ์ฐ
let sum 6 + 12; let dif = 95.5 - 63.2; let pro = 4 * 20; let quo = 56.7 / 32.2; let reminder = 43 % 5;
- ์ฌ์น ์ฐ์ฐ์ ์ด์ฉํ์ฌ ํ๋์ ๊ฐ ํธ๊ฐ ํ ๋ณ์์ ํ ๋น
- โ๏ธ ๋ถ๋ฆฐ ํ์
true
,false
- ํฌ๊ธฐ๋ 1byte
- โ๏ธ ๋ฌธ์ ํ์
- char ํ์
์ ์ธ์ด๊ฐ ์ ๊ณตํ๋ ๊ฐ์ฅ ๊ธฐ๋ณธ์ ์ธ ์ํ๋ฒณ ํ์
- char ๋ฆฌํฐ๋ด์ ์์ ๋ฐ์ดํ ํํ
- 4bytes ํฌ๊ธฐ์ ์ ๋์ฝ๋ ์ค์นผ๋ผ๊ฐ
- ์ ๋์ฝ๋ ์ค์นผ๋ผ๊ฐ์ ๋ฒ์๋
U+0000 ~ U+D7FF
,U+E000 ~ U+10FFFF
๊น์ง์ ๊ฐ ํฌํจ
- char ํ์
์ ์ธ์ด๊ฐ ์ ๊ณตํ๋ ๊ฐ์ฅ ๊ธฐ๋ณธ์ ์ธ ์ํ๋ฒณ ํ์
- โ๏ธ ์ ์ ํ์
๐ค Compound Type
ํ๋์ ํ์ ์ผ๋ก ์ฌ๋ฌ ๊ฐ์ ๊ฐ์ ๊ทธ๋ฃนํํ ํ์
๊ธฐ๋ณธ์ ์ผ๋ก ํํ(tuples)๊ณผ ๋ฐฐ์ด(arrays) ๋ฑ ๋ ๊ฐ์ง ์ปดํ์ด๋ ํ์ ์ง์
โ๏ธ ํํ ํ์
์๋ก ๋ค๋ฅธ ํ์ ์ ์ฌ๋ฌ ๊ฐ์ ํ๋์ ์ปดํ์ด๋ ํ์ ์ผ๋ก ๊ทธ๋ฃนํํ๊ธฐ์ ์ ํฉํ ํ์
๊ณ ์ ๊ธธ์ด๋ฅผ ๊ฐ์ง๋ฉฐ, ํ ๋ฒ ์ ์ํ๋ฉด ๊ทธ ํฌ๊ธฐ๋ฅผ ํค์ฐ๊ฑฐ๋ ์ค์ผ ์ ์์
type annotation
์ ์ฉ ๊ฐ๋ฅํํ์์ ๊ฐ๋ณ ๊ฐ์ ์ฝ์ผ๋ ค๋ฉด ํจํด ๋งค์นญ์ ์ด์ฉํด ํํ ๊ฐ์ ํด์ฒด(destruct) ํ ์ ์์
fn main() { let tup = (500, 6.4, 1); let (x, y, z) = tup; println!("{}, {}, {}", x, y, z); } // Result // 500, 6.4, 1
let
๊ตฌ๋ฌธ์ ํจํด์ ์ง์ ํด tup ๋ณ์์ ํ ๋น๋ ๊ฐ๋ค์ ๊ฐ๋ณ ๋ณ์์ ๊ฐ๊ฐ ๋์fn main() { let tup = (500, 6.4, 1); println!("{}, {}, {}", tup.0, tup.1, tup.2); }
์ธ๋ฑ์ค๋ฅผ ์ง์ ํ์ฌ destruct ํ๊ธฐ
โ๏ธ ๋ฐฐ์ด ํ์
- ํํ๊ณผ ๋ฌ๋ฆฌ ๋ฐฐ์ด์ ๊ฐ ์์๋ ๋ฐ๋์ ๊ฐ์ ํ์
- ๋ฌ์คํธ์ ๋ฐฐ์ด์ ์ผ๋ถ ๋ค๋ฅธ ์ธ์ด์ ๋ฐฐ์ด๊ณผ ๋ฌ๋ฆฌ ๊ณ ์ ๊ธธ์ด
- ๋ฐฐ์ด์ ๋ค๋ฃจ๊ณ ์ ํ๋ ๋ฐ์ดํฐ๋ฅผ ํ(heap) ์ด ์๋ ์คํ (stack) ๋ฉ๋ชจ๋ฆฌ์ ํ ๋นํ๊ฑฐ๋ ํญ์ ๊ณ ์ ๋ ๊ฐ์์ ์์ ๋ฅผ ๋ค๋ฃฐ ๋ ์ ์ฉ
- Ex1)
let a: [i32; 5] = [1, 2, 3, 4, 5];
i32 ํ์ ์ ์์๊ฐ 5๊ฐ
์ง์
- Ex2)
let a = [3; 5];
- ๊ฐ ์์์ ๊ฐ์ ๊ฐ์ ๊ฐ์ง ๋ฐฐ์ด ์ ์ธ
Vector
๋งํผ ์ ์ฐํ์ง ์์Vector
: ํ์ค lib์ด ์ง์. ๋ฐฐ์ด๊ณผ ์ ์ฌํ์ง๋ง ํฌ๊ธฐ๋ฅผ ์์ ๋กญ๊ฒ ์กฐ์ ๊ฐ๋ฅ. ๋ฐฐ์ด๊ณผ ๋ฒกํฐ ์ค ์ด๋ ๊ฒ์ ์ฌ์ฉํด์ผ ํ ์ง ํ์ค์น ์์๋๋ ๋ฒกํฐ๋ฅผ ์ ํํ๋ ํธ์ด ์ข์
โ๏ธ ๋ฐฐ์ด ์์ ์ ๊ทผ
- ๋ฐฐ์ด์ ์คํ์ ํ ๋น๋ ํ ๋ฉ์ด๋ฆฌ์ ๋ฉ๋ชจ๋ฆฌ
- ์ ๊ทผ ์ ์ธ๋ฑ์ค ํ์ฉ
โ๏ธ ์ ํจํ์ง ์์ ๋ฐฐ์ด ์์์ ์ ๊ทผ
- ์ปดํ์ผ์ ๊ฐ๋ฅํ์ง๋ง ์๋ฌ ๋ฐ์ => ๋ฐํ์ ์๋ฌ
- ์ง์ ๋ ์ธ๋ฑ์ค๊ฐ ๋ฐฐ์ด ์ ์ฒด ๊ธธ์ด๋ณด๋ค ์์ ๊ฐ์ธ์ง ๊ฒ์ฌ ํ ์ธ๋ฑ์ค๊ฐ ๋ฐฐ์ด ๊ธธ์ด๋ณด๋ค ํฌ๋ค๋ฉด
Panic
๋ฐ์ - ๋ฌ์คํธ์ ์์ ์ฑ ์๋ฆฌ ๊ฐ์
์ ์ต์ด ์์
- ์๋ฑํ ๋ฉ๋ชจ๋ฆฌ์ ๋ํ ์ ๊ทผ์ ํ์ฉํ๋ ๋์ ํ๋ก๊ทธ๋จ์ ์ฆ๊ฐ ์ค๋จํ๋ ๋ณดํธ ์ฅ์น ์ ๊ณต
'Development Study > Rust' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[Rust] String Type (String, str) (0) | 2023.01.05 |
---|---|
[Rust] Start Rust (Day 6) - Common Programming Concepts [2] (2) | 2023.01.03 |
[Rust] Start Rust (Day 4) - Guessing Game [3] (0) | 2022.10.27 |
[Rust] Start Rust (Day 3) - Guessing Game [2] (0) | 2022.08.23 |
[Rust] Start Rust (Day 2) - Guessing Game [1] (0) | 2022.08.09 |