๐ก ๋ณธ ๋ฌธ์๋ 'Rust๊ฐ ๋จ๋ ์ด์ ๋ฐ ๋ฌธ๋ฒ ํน์ง'์ ๋ํด ์ ๋ฆฌํด๋์ ๊ธ์ ๋๋ค.
Rust๊ฐ ๋จ๋ ์ด์ ์ ์ด๋ฅผ ๊ณต๋ถํ๋ฉด์ ๋๋ ๋ฌธ๋ฒ์ ๋ ํนํ(?) ๋ถ๋ถ์ ๋ํด ์ ๋ฆฌํ์์ผ๋ ์ฐธ๊ณ ํ์๊ธฐ ๋ฐ๋๋๋ค.
1. Rust ์ธ์ด ์๊ฐ
๋ฌ์คํธ๋ 2010๋ ๋ชจ์ง๋ผ์ ์ํด ๋ง๋ค์ด์ ธ ํ์ฌ ๋ฌ์คํธ ์ฌ๋จ๊ณผ ์คํ์์ค ์ปค๋ฎค๋ํฐ์ ์ํด ๊ฐ๋ฐ๋๊ณ ์๋, ์ฝ๊ณ ์์ ํ๊ฒ ๋ณ๋ ฌ ํ๋ก๊ทธ๋๋ฐ์ ํ ์ ์๋ ์ฐจ์ธ๋ ํ๋ก๊ทธ๋๋ฐ ์ธ์ด์ ๋๋ค.
์ด ์ธ์ด๋ ์๋์ ๋ฉ๋ชจ๋ฆฌ ์ฌ์ฉ ์ธก๋ฉด์์ ํจ์จ์ ์ด๋ฉด์๋ ์์ ์ ์ธ ์ฝ๋๋ฅผ ์์ฑํ ์ ์๋ ์ ์์ค ์ธ์ด์ด๋ฉฐ, C/C++๋ณด๋ค ๋ ์์ ํ ์ปดํ์ผ๋ฌ๋ฅผ ์ง์ํฉ๋๋ค. ๊ทธ๋ ๋ค๊ณ ์ ์์ค์ ์์คํ ํ๋ก๊ทธ๋๋ฐ์ ํ์ ๋์ง ์์ผ๋ฉฐ CLI ์ฑ, ์น ์๋ฒ ๋ฑ ๋ค์ํ ๋ถ์ผ์์ ์ฌ์ฉํ ์ ์์ต๋๋ค.
1.1 Rust ์ธ์ด์ ํน์ง
- ์์ ํ ๋ฉ๋ชจ๋ฆฌ ๊ด๋ฆฌ
- ์ฒ ์ ํ ์์ธ๋ ์๋ฌ ๊ด๋ฆฌ
- ํน์ดํ enum ์์คํ
- ํธ๋ ์ดํธ
- ํ์ด์ง๋ ๋งคํฌ๋ก
- ๋น๋๊ธฐ ํ๋ก๊ทธ๋๋ฐ
- ์ ๋ค๋ฆญ
2. Rust ๊ธฐ๋ณธ ๋ฌธ๋ฒ
2.1 Rust ๊ธฐ๋ณธ ๋ฌธ๋ฒ: ๋ณ์
- let ํค์๋๋ฅผ ์ฌ์ฉ
- ๋ณ์์ ์๋ฃํ์ ๋๋ถ๋ถ ์ ์ถํ ์ ์๋ค.
- ๋ณ์ ์จ๊น(Variable Shadowing)์ ์ง์
- ๋ณ์์ ์ด๋ฆ์ ์ธ์ ๋ snake_case ํํ๋ก ์ง๋๋ค.
- Rust์์ ๋ณ์๋ ๊ธฐ๋ณธ์ ์ผ๋ก ๋ณ๊ฒฝ ๋ถ๊ฐ(Immutable) ํ์ ์ด๋ค.
- ๋ณ๊ฒฝ ๊ฐ๋ฅ(Mutable)ํ ๊ฐ์ ์ํ๋ค๋ฉด mut ํค์๋๋ก ํ์ํด์ค์ผ ํ๋ค.
2.2 Rust ๊ธฐ๋ณธ ๋ฌธ๋ฒ: ์์
- ์์๋ ๋ณ์์ ๋ฌ๋ฆฌ ๋ฐ๋์ ๋ช ์์ ์ผ๋ก ์๋ฃํ์ ์ง์ ํด์ผ ํ๋ค.
- ์์์ ์ด๋ฆ์ ์ธ์ ๋ SCREAMING_SNAKE_CASE ํํ๋ก ์ง๋๋ค.
2.3 Rust ๊ธฐ๋ณธ ๋ฌธ๋ฒ: match
- switch๋ฅผ ๋์ฒดํ๋ ๊ตฌ๋ฌธ
- ๋ชจ๋ ์ผ์ด์ค๋ฅผ ๋น ์ง ์์ด ์ฒ๋ฆฌํด์ผ ํ๋ค.
2.4 Rust ๊ธฐ๋ณธ ๋ฌธ๋ฒ: Option
- null์ ์ฐ์ง ์๊ณ ๋ Nullableํ ๊ฐ์ ํํํ ์ ์๋ ๋ด์ฅ๋ Generic ์ด๊ฑฐ์ฒด
2.5 Rust ๊ธฐ๋ณธ ๋ฌธ๋ฒ: Result
- ์คํจํ ๊ฐ๋ฅ์ฑ์ด ์๋ ๊ฐ์ ๋ฐํํ ์ ์๋๋ก ํด์ฃผ๋ ๋ด์ฅ๋ Generic ์ด๊ฑฐ์ฒด
2.6 Rust ๊ธฐ๋ณธ ๋ฌธ๋ฒ: ์์ ๊ถ(unique_ptr)
- ํ์ ์ Copy ํธ๋ ์(์คํ ์ ์ ์ฅ)์ด ์๊ณ Drop ํธ๋ ์์ด ์์ด Heap์์ ์ ์ฅ๋๋ ๋ฉ๋ชจ๋ฆฌ๋ ํ ๋ณ์๋ง ๊ฐ์ ๋ํ ์์ ๊ถ์ ๊ฐ์ง๋ค.
- ์์ ์๊ฐ ํจ์์ ์ธ์๋ก ์ ๋ฌ๋๋ฉด, ์์ ๊ถ์ ๊ทธ ํจ์์ ๋งค๊ฐ ๋ณ์๋ก ์ด๋(Move)ํ๋ฉฐ, ์๋ ํจ์์ ์๋ ๋ณ์๋ ๋ ์ด์ ์ฌ์ฉํ ์ ์๋ค.
- Rust์ ์ฐธ์กฐ ๊ท์น
- ๋จ 'ํ๋์ ๋ณ๊ฒฝ ๊ฐ๋ฅํ ์ฐธ์กฐ(&mut)' ๋๋ '์ฌ๋ฌ๊ฐ์ ๋ณ๊ฒฝ ๋ถ๊ฐ๋ฅํ ์ฐธ์กฐ(&)'๋ง ํ์ฉํ๋ฉฐ, ๋ ๋ค๋ ์๋๋ค.
- ์ฐธ์กฐ๋ ๊ทธ ์์ ์๋ณด๋ค ๋ ์ค๋ ์ด ์ ์๋ค.
- ์์ ๊ถ, ๋น๋ฆผ, ๊ทธ๋ฆฌ๊ณ ์ฌ๋ผ์ด์ค์ ๊ฐ๋ ์ ๋ฌ์คํธ ํ๋ก๊ทธ๋จ์ ๋ฉ๋ชจ๋ฆฌ ์์ ์ฑ์ ์ปดํ์ผ ํ์์ ๋ณด์ฅํ๋ ๊ฒ์ด๋ค.
+ ์ปดํ์ผ ํ์์ ๋ฐ์ดํฐ ๋ ์ด์ค(data race) ๋ฐฉ์ง
๋ฐ์ดํฐ ๋ ์ด์ค๋ ์๋์ ์ ๋ฆฌ๋ ์ธ ๊ฐ์ง ๋์์ด ๋ฐ์ํ์๋ ๋ํ๋๋ ํน์ ํ ๋ ์ด์ค ์กฐ๊ฑด์ ๋๋ค:
- ๋ ๊ฐ ์ด์์ ํฌ์ธํฐ๊ฐ ๋์์ ๊ฐ์ ๋ฐ์ดํฐ์ ์ ๊ทผํ๋ค.
- ๊ทธ ์ค ์ ์ด๋ ํ๋์ ํฌ์ธํฐ๊ฐ ๋ฐ์ดํฐ๋ฅผ ์ด๋ค.
- ๋ฐ์ดํฐ์ ์ ๊ทผํ๋๋ฐ ๋๊ธฐํ๋ฅผ ํ๋ ์ด๋ ํ ๋ฉ์ปค๋์ฆ๋ ์๋ค.
2.7 Rust ๊ธฐ๋ณธ ๋ฌธ๋ฒ: ์๋ช ์ฃผ๊ธฐ
- Rust์ ์ปดํ์ผ๋ฌ๋ ๋ชจ๋ ๋ณ์์ ์๋ช ์ฃผ๊ธฐ๋ฅผ ์ดํดํ๋ฉฐ ์ฐธ์กฐ๊ฐ ์ ๋๋ก ๊ทธ ์์ ์๋ณด๋ค ๋ ์ค๋ ์กด์ฌํ์ง ๋ชปํ๋๋ก ๊ฒ์ฆ์ ์๋ํ๋ค.
- ํจ์์์๋ ์ด๋ค ๋งค๊ฐ ๋ณ์์ ๋ฆฌํด ๊ฐ์ด ์๋ก ๊ฐ์ ์๋ช ์ฃผ๊ธฐ๋ฅผ ๊ณต์ ํ๋์ง ์๋ณํ ์ ์๋๋ก ์ฌ๋ณผ๋ก ํ์ํด ๋ช ์์ ์ผ๋ก ์๋ช ์ฃผ๊ธฐ๋ฅผ ์ง์ ํ ์ ์๋ค.
2.8 Rust ๊ธฐ๋ณธ ๋ฌธ๋ฒ: OOP
- Rust์์๋ ์ด๋ ํ ๋ฐฉ๋ฒ์ผ๋ก๋ ๋ฐ์ดํฐ์ ๋์์ ์์์ด ๋ถ๊ฐ๋ฅํ๋ค.
- ๊ตฌ์กฐ์ฒด๋ ๋ถ๋ชจ ๊ตฌ์กฐ์ฒด๋ก๋ถํฐ ํ๋๋ฅผ ์์๋ฐ์ ์ ์๋ค.
- ๊ตฌ์กฐ์ฒด๋ ๋ถ๋ชจ ๊ตฌ์กฐ์ฒด๋ก๋ถํฐ ํจ์๋ฅผ ์์๋ฐ์ ์ ์๋ค.
- ๋์ Rust๋ ํธ๋ ์์ผ๋ก ๋คํ์ฑ์ ์ง์ํ๋ค. ๋ํ ํธ๋ ์์ ๋ค๋ฅธ ํธ๋ ์์ ๋ฉ์๋๋ค์ ์์๋ฐ์ ์ ์๋ค.
๋ง๋ฌด๋ฆฌ
์ต๊ทผ๋ค์ด Rust ์ธ์ด์ ๊ด์ฌ์ด ์๊ฒจ ๊ณต๋ถํ๋ค๋ณด๋ ๊ฝค๋ ์ฌ๋ฏธ์๋ ์ธ์ด ๊ฐ์๋ค. ์ ๋ง ์์ฆ ํซํ ์ธ์ด์ ํน์ฑ์ ๋ชจ๋ ๋์ด๋ค๋ชจ์ ์ ์์ค ์ธ์ด ๊ฐ๋ค๋ ์๊ฐ์ด ๋ ๋ค. ๊ฒ๋ค๊ฐ ์ธ์ด๋ฅผ ์ฌ์ฉํ๋ ๋ฐ ์์ด ์ ํ์ ๋ง์ด ๋์ด ๋ณด์์ ๋ง์ ์ ๊ฒฝ์ ์ผ์ผ๋ฉฐ ๋ฉํฌ๋ก, ๋ณ์ ์ ์ธ ๋ฑ ์ปดํ์ผ ์๊ฐ์ ๋๋ถ๋ถ ์ฒ๋ฆฌํ์ฌ ์๋๋ ๋งค์ฐ ๋น ๋ฅด๊ฒ ์ค๊ณํ์๋ค. ๋ฌผ๋ก ๋๋ถ์ ์ปดํ์ผ/๋น๋ํ๊ธฐ๋ ์ด์ง ํ๋ค๊ธด ํ๋ค(์ ๋ฌผ๋ก C/C++์ ๋นํ๋ฉด ์๋ฌ์ ์์ด ์ค๋ช ์ด ์์ธํด์ ๊ทธ๊ฑด ๋ง์์ ๋ ๋ค). ์์ผ๋ก ๋ฌ์คํธ๋ ์ ์์ค, ๊ณ ์์ค ๊ฐ๋ฆฌ์ง ์๊ณ ๋ง์ ์ฌ๋๋ค์ด ์ฌ์ฉํ ๊ฒ ๊ฐ๋ค.
์ฐธ๊ณ
- [Rust Official Docs] The Rust Programming Language: https://doc.rust-lang.org/stable/book/title-page.html
- [Rust Official Docs] The Rust Programming Language(ko): https://doc.rust-lang.org/stable/book/title-page.html
- [Github] The Rust Programming Language: https://github.com/rust-lang
'Study: Software(SW) > SW: Language' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[JAVA] JVM vs JDK vs JRE? (java์ javac์ ๋ฒ์ ๋ฐ ์ค์น๊ฒฝ๋ก ์์๋ณด๊ธฐ) (0) | 2023.01.19 |
---|---|
[C++] C++ #include ํค๋ํ์ผ ์์ (0) | 2023.01.17 |
[IDE] VSCode Rust ๊ฐ๋ฐํ๊ฒฝ ์ค์ (MacOS M1) (0) | 2023.01.04 |
[Python] Python ๋จ์ ํ ์คํธ(Unit Test): unittest ์ฌ์ฉ๋ฒ (2) | 2022.12.08 |
[C++] ๊ฐ์ฒด์งํฅ ํ๋ก๊ทธ๋๋ฐ: ์์ธ ์ฒ๋ฆฌ(try, catch, throw, exception) (0) | 2022.08.29 |