๋ฌ์คํธ(Rust)๋ ์ฑ๋ฅ๊ณผ ๋ณด์์ด ๋งค์ฐ ๊ฐ์กฐ๋ ์ ์ ์ ํ ํ๋ก๊ทธ๋๋ฐ ์ธ์ด์ด๋ฉฐ, ํนํ ์๋ฃํ ๋ฐ ๋ฉ๋ชจ๋ฆฌ ๊ด๋ฆฌ ์ธก์์ ๊ฐ์ ์ ์ง๋๋ค. ๋ฟ๋ง ์๋๋ผ, ํ๋์จ์ด ์ ์ด๊ฐ ๊ฐ๋ฅํ๋ค๋ ์ ์์ ํ์จ์ด ๊ฐ๋ฐ์๋ ํ์ฉํ ์ ์๋ค. ์ด๋ฌํ ํน์ฑ๋ค์ ์ํด C++ ์ธ์ด์ ์ ์ฌํ ์ฑ๋ฅ์ ์ง๋ ๋์์ ํ๋ฅญํ ๋ณด์์ฑ์ด ๋ณด์ฅ๋์ด ๋ง์ดํฌ๋ก์ํํธ, ๊ตฌ๊ธ, ์๋ง์กด ๋ฑ์ ์ฃผ์ IT ๊ธฐ์ ์ ๊ด์ฌ๊ณผ ์ง์์ ๋ฐ๊ณ ์๋ค.
๋ฌ์คํธ ํ๋ก๊ทธ๋๋ฐ ์ธ์ด๋ฅผ ์คํํ๋ ๋ฐ ํ์ํ ํด์ฒด์ธ์ ๊ณต์ ํํ์ด์ง์์ rustup_init.exe๋ฅผ ๋ค์ด๋ก๋ ๋ฐ์ ์ค์นํ๋ค.
์ค์น ๊ณผ์ ์์ 2013 ๋ฒ์ ์ด์์ ๋น์ฃผ์ผ ์คํ๋์ค์ด ์๊ตฌ๋๋ ๋ฐ, ๋ฏธ๋ฆฌ Desktop development with C++ ๊ทธ๋ฆฌ๊ณ ์๋์ฐ 10 ๋๋ 11 SDK๋ฅผ ์ค๋นํ๋๋ก ํ๋ค.
์ฌ๊ธฐ์ ๋ฌ์คํธ ํ๋ก๊ทธ๋๋ฐ ์ธ์ด์ ํด์ฒด์ธ(toolchain)์ด๋, ์ํํธ์จ์ด ์ ํ ๊ฐ๋ฐ์ ํ์ฉ๋๋ ํ๋ก๊ทธ๋๋ฐ ๋๊ตฌ๋ค์ ์งํฉ์ ๊ฐ๋ฆฌํค๋ฉฐ ๋ํ์ ์ผ๋ก ๋ค์ ์ธ ๊ฐ์ ๋ช ๋ น์ด ํ๋ก๊ทธ๋จ์ด ์๋ค.
rustc
: ๋ฌ์คํธ ์ปดํ์ผ๋ฌ(compiler)cargo
: ๋ฌ์คํธ ํจํค์ง ๊ด๋ฆฌ์; ํ๋ก์ ํธ๋ฅผ ์ปดํ์ผ ๋ฐ ์คํํ๋ค.rustup
: ๋ฌ์คํธ ํด์ฒด์ธ ๊ด๋ฆฌ์, ์ฆ ์์rustc
๋ฐcargo
ํ๋ก๊ทธ๋จ์ ๋ค๋ฅธ ๋ฒ์ ์ผ๋ก ์ค์น ๋ฐ ์ ํํ๋ค.
์ค์น๊ฐ ์๋ฃ๋๋ฉด %UserProfile%
๋๋ ํ ๋ฆฌ์ .rustup
๋ฐ .cargo
ํด๋๊ฐ ์์ฑ๋๋ค.
๋๋ ํ ๋ฆฌ | ์ค๋ช |
---|---|
.rustup | rustc , cargo ๋ฑ์ ํฌํจํ ๋ฌ์คํธ ํด์ฒด์ธ์ด ์ค์ง์ ์ผ๋ก ์์นํ๋ ๋๋ ํ ๋ฆฌ์ด๋ฉฐ, toolchains ํ์ํด๋์ ๋ฒ์ ๋ง๋ค ๋๋์ด ์ค์น๋๋ค. |
.cargo | ์ค์น๋ ๋ฌ์คํธ ํด์ฒด์ธ์ ๋งํฌ๋ ๋ฐ์ด๋๋ฆฌ ํ์ผ์ด ์์นํ์ฌ, ๊ฐ๋ฐ์๋ ๋ฌ์คํธ์ ์ ๋ฐ์ ์ธ ํ๊ฒฝ ๊ตฌ์ฑ์ ๊ทธ๋๋ก ์ ์งํ ์ฑ rustup ์์ ์ ํํ ๋ฒ์ ์ผ๋ก ๋ณ๊ฒฝํ์ฌ ์ฌ์ฉํ ์ ์๋ค. |
ํตํฉ ๊ฐ๋ฐ ํ๊ฒฝ(integrated development environment; IDE)์ ์ต์ํ ํ๋ก๊ทธ๋๋ฐ ์ธ์ด์ ์์ค ์ฝ๋ ํธ์ง, ํ๋ก๊ทธ๋จ ๋น๋, ๊ทธ๋ฆฌ๊ณ ๋๋ฒ๊น ๊ธฐ๋ฅ์ ์ ๊ณตํ๋ ์ํํธ์จ์ด ๊ฐ๋ฐ ํ๋ก๊ทธ๋จ์ด๋ค. ํด์ฒด์ธ์ ๋ฌ์คํธ ์ฝ๋๋ฅผ ์ปดํจํฐ๊ฐ ์คํํ ์ ์๋๋ก ํ๋ ๊ฐ๋ฐ ๋๊ตฌ์ด์ง๋ง ๋ฌ์คํธ ์ฝ๋ ํธ์ง๊ธฐ๋ ์๋๋ค. ๋ฌ์คํธ ์ฝ๋๋ฅผ ์์ฑํ๊ณ ํ๋ก๊ทธ๋จ์ผ๋ก ์คํํ์ฌ ๋ฌธ์ ๊ฐ ๋ฐ์ํ๋ฉด ๊ฒํ ํ ์ ์๋ IDE๊ฐ ์ ๋์ ์ผ๋ก ํ์ํ๋ค.
-
๋น์ฃผ์ผ ์คํ๋์ค ์ฝ๋[์ฐธ๊ณ ], ์ผ๋ช VS Code๋ ๋ง์ดํฌ๋ก์ํํธ์์ ๊ฐ๋ฐํ ๋ฌด๋ฃ ์์ค ์ฝ๋ ํธ์ง๊ธฐ์ด๋ค. ๋น๋ก ๊ธฐ์ ์ ์ผ๋ก IDE๋ ์๋์ง๋ง, rust-analyzer ํ์ฅ๋๊ตฌ๋ฅผ ์ค์นํ๋ฉด ์ฝ๋ ์๋์์ฑ, ์๋ฃํ ์ ์, ๊ตฌ๋ฌธ ํ์ด๋ผ์ดํธ ๋ฑ์ ๊ธฐ๋ฅ๋ค์ ์ ๊ณตํ๋ค. ์ฝ๋ ๋๋ฒ๊น ์ ํ๋ ค๋ฉด ์๋๋ฅผ ํจ๊ป ์ค์นํ๋ค.
- ๋ง์ดํฌ๋ก์ํํธ C++ (์๋์ฐ ์ด์์ฒด์ )
- CodeLLDB (macOS ๋๋ ๋ฆฌ๋ ์ค ์ด์์ฒด์ )
์ฐธ๊ณ : Managing Growing Projects with Packages, Crates, and Modules - The Rust Programming Language
๋ฌ์คํธ ํ๋ก๊ทธ๋๋ฐ ์ธ์ด๋ cargo
๋ผ๋ ๊ณต์ ํจํค์ง ๊ด๋ฆฌ ๋๊ตฌ๋ฅผ ํตํด ํ๋ก์ ํธ๋ฅผ ๊ด๋ฆฌํ๋ค.
cargo
๋๊ตฌ์ ํ๋ก์ ํธ ๊ด๋ฆฌ ๋ช
๋ น๋ช ๋ น์ด | ์ค๋ช |
---|---|
cargo build | ํ๋ก์ ํธ ๋น๋ |
cargo run | ํ๋ก์ ํธ (๋น๋ ๋ฐ) ์คํ |
cargo clean | ํ๋ก์ ํธ ๋น๋ ๊ฒฐ๊ณผ๋ฌผ ์ ๊ฑฐ ๋ฐ ์ ๋ฆฌ |
cargo check | ํ๋ก์ ํธ ์ ํจ์ฑ ๊ฒ์ฌ; ์ปดํ์ผ ์๋ต์ผ๋ก ์๋ชจ ์๊ฐ์ ๋จ์ถํ๋ ๊ฒฐ๊ณผ๋ฌผ ๋ถ์ฌ |
๋ฌ์คํธ ํ๋ก๊ทธ๋๋ฐ์ ๊ธฐ๋ณธ์ ์ผ๋ก ๋๋ฒ๊ทธ ๋ชจ๋์์ ํ๋ก์ ํธ๋ฅผ ๋น๋ํ๊ณ ์คํํ๋ฉฐ, ์ปดํ์ผ ๋ถ์ฐ๋ฌผ๋ค์ .\target\debug
ํด๋ ์์ ์์นํ๋ค. ๋ง์ผ ์ ์ ๋ฐฐํฌ๋ฅผ ์ํด ์ต์ ํ๋ ํ๋ก๊ทธ๋จ์ผ๋ก ๋น๋ํ๊ธฐ ์ํค ๋ช
๋ น์ด์ --release
ํ๋๊ทธ๋ฅผ ์ถ๊ฐํ๋ฉด .\target\release
ํด๋์ ํ๋ก๊ทธ๋จ์ด ์์ฑ๋๋ค.
- VS Code ํธ์ง๊ธฐ์ rust-analyzer ํ์ฅ๋๊ตฌ๋ฅผ ์ฌ์ฉํ๋ฉด
main()
์ง์ ์ ์์ "โถ Run | Debug" CodeLens ํ์๊ฐ ๋ํ๋๋ค. ์ด๋cargo
๋ฅผ ๋์ ํ์ฌ ํ๋ก์ ํธ๋ฅผ ์ปดํ์ผ ๋ฐ ์คํํ๋ ๋ฐ ํ์ฉ๋ ์ ์๋ค.
ํฌ๋ ์ดํธ(crate; ํ๋ฌผ์์)๋ ์ปดํ์ผ๋ก ์์ฑ๋ ๊ฐ์ฅ ์์ ๋จ์์ ๊ฒฐ๊ณผ๋ฌผ์ด๋ฉฐ, ๊ฐ๋จํ ๋งํด .RS
์์ค ํ์ผ(์ผ๋ช
ํฌ๋ ์ดํธ ํ์ผ; crate file)๋ก๋ถํฐ ์์ฑ๋ ์คํ ๋ฐ ๋ผ์ด๋ธ๋ฌ๋ฆฌ ํ์ผ์ด๋ค. ํฌ๋ ์ดํธ ํ์ผ ์ค์์ ๋ฌ์คํธ ํ๋ก๊ทธ๋๋ฐ ์ปดํ์ผ์ ๊ทผ๋ณธ์ด ๋๋ ์์ค ํ์ผ์ ํฌ๋ ์ดํธ ๋ฃจํธ(crate root)์ด๋ผ๊ณ ๋ถ๋ฅธ๋ค.
ํฌ๋ ์ดํธ๋ ์๋์ ๊ฐ์ด ๋ ์ ํ์ผ๋ก ๋๋์ด์ง๋ค:
์ด์ง ํฌ๋ ์ดํธ (binary crate) | ๋ผ์ด๋ธ๋ฌ๋ฆฌ ํฌ๋ ์ดํธ (library crate) | |
---|---|---|
์ค๋ช | .EXE ์คํ ํ๋ก๊ทธ๋จ | .RLIB ๋ผ์ด๋ธ๋ฌ๋ฆฌ ํ์ผ |
ํฌ๋ ์ดํธ ๋ฃจํธ | src/main.rs | src/lib.rs |
main ์ง์
์ | โญ | โ |
-
std
ํฌ๋ ์ดํธ: ์ผ๋ช "๋ฌ์คํธ ํ์ค ๋ผ์ด๋ธ๋ฌ๋ฆฌ(Rust Standard Library)"๋ ๋ฌ์คํธ ์ํํธ์จ์ด์ ๊ธฐ๋ฐ์ด ๋์ด ์๋ฃํ, ํ์ค ๋งคํฌ๋ก, ๊ทธ๋ฆฌ๊ณ ๋ค์ํ ๋ชจ๋์ ์ ๊ณตํ๋ค. ๋ชจ๋ ํฌ๋ ์ดํธ๋ ๊ธฐ๋ณธ์ ์ผ๋กuse
ํค์๋๋ฅผ ์ฌ์ฉํด ์๋์ ๊ฐ์ด ํ์ค ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ๋ถ๋ฌ์ฌ ์ ์๋ค.// ํ์ค ๋ผ์ด๋ธ๋ฌ๋ฆฌ์ ํ๋ก์ธ์ค ํ๊ฒฝ ๋ชจ๋ use std::env;
ํจํค์ง(package)๋ ํ๋ ์ด์์ ํฌ๋ ์ดํธ๋ฅผ ๋ค๋ฃจ๋ ๋ฒ๋ค(bundle)์ด๋ค. ๊ฐ ํจํค์ง๋ ์ฌ๋ฌ ๊ฐ์ ์ด์ง ํฌ๋ ์ดํธ๋ฅผ ๋ค๋ฃฐ ์ ์์ง๋ง, ๋ผ์ด๋ธ๋ฌ๋ฆฌ ํฌ๋ ์ดํธ๋ ์ค๋ก์ง ํ๋๋ง ๊ฐ๋ฅํ๋ค. ํจํค์ง์ ํน์ง ์ค ํ๋๋ Cargo.toml
ํ์ผ์ ๊ฐ์ง๊ณ ์๋ค๋ ์ ์ธ๋ฐ, ์ด๋ ํฌ๋ ์ดํธ๋ฅผ ์ด๋ป๊ฒ ๋น๋๋ฅผ ํ ๊ฒ์ธ์ง ์ค๋ช
ํ๋ค.
๋ฌ์คํธ ํ๋ก๊ทธ๋๋ฐ์์ ํ๋ก์ ํธ๋ฅผ ์์ฑํ๋ค๋ ๊ฒ์ด ๋ฐ๋ก ํจํค์ง๋ฅผ ๊ฐ๋ฆฌํค๋ฉฐ, ์๋ก์ด ํจํค์ง๋ฅผ ์์ฑํ๋ ค๋ฉด ์๋ ๋ช ๋ น์ด๋ฅผ ์ ๋ ฅํ๋ค.
cargo new <ํ๋ก์ ํธ๋ช
>
๊ตฌ๋ฌธ(syntax)์ ํ๋ก๊ทธ๋๋ฐ ์ธ์ด์์ ๋ฌธ์ ๋ฐ ๊ธฐํธ๋ค์ ์กฐํฉ์ด ์ฌ๋ฐ๋ฅธ ๋ฌธ์ฅ ๋๋ ํํ์์ ๊ตฌ์ฑํ์๋์ง ์ ์ํ๋ ๊ท์น์ด๋ค. ๊ฐ ํ๋ก๊ทธ๋๋ฐ ์ธ์ด๋ง๋ค ๊ท์ ํ๋ ๊ตฌ๋ฌธ์ด ๋ค๋ฅด๋ฉฐ, ์ด๋ฅผ ์ค์ํ์ง ์์ ์ ํด๋น ํ๋ก๊ทธ๋จ์ ๋น๋๋์ง ์๊ฑฐ๋, ์คํ์ด ๋์ด๋ ์ค๋ฅ ๋ฐ ์๋์น ์์ ๋์์ ์ํํ๋ค.
๋ค์์ ๋ฌ์คํธ ํ๋ก๊ทธ๋๋ฐ ์ธ์ด์์ ๊ตฌ๋ฌธ์ ๊ด์ฌํ๋ ์์๋ค์ ์๊ฐํ๋ค:
-
ํํ์(expression)
๊ฐ์ ๋ฐํํ๋ ๊ตฌ๋ฌธ์ ์กด์ฌ๋ฅผ ๊ฐ๋ฆฌํจ๋ค. ํํ์์ ๋ํ ๊ฒฐ๊ณผ๋ฅผ ๋์ถํ๋ ๊ฒ์ ํ๊ฐ(evaluate)๋ผ๊ณ ๋ถ๋ฅธ๋ค.
2 + 3 // ์ซ์ 5๋ฅผ ๋ฐํ 2 < 3 // ๋ ผ๋ฆฌ ์ฐธ์ ๋ฐํ
-
ํ ํฐ(token)
ํํ์์ ๊ตฌ์ฑํ๋ ๊ฐ์ฅ ๊ธฐ๋ณธ์ ์ธ ์์์ด๋ฉฐ, ๋ํ์ ์ผ๋ก ํค์๋(keyword), ์๋ณ์(identifier)์ ๋ฆฌํฐ๋ด(literal) ๋ฑ์ด ์๋ค.
variable // ์๋ณ์ 2 // ์ ์ ๋ฆฌํฐ๋ด
-
๋ฌธ์ฅ(statement)
์ค์ง์ ์ผ๋ก ๋ฌด์ธ๊ฐ๋ฅผ ์คํํ๋ ๊ตฌ๋ฌธ์ ์กด์ฌ๋ฅผ ๊ฐ๋ฆฌํจ๋ค: ํํ ํ๋ ์ด์์ ํํ์์ผ๋ก ๊ตฌ์ฑ๋์ง๋ง,
break
๋ฐcontinue
์ ๊ฐ์ด ๋ ๋ฆฝ์ ์ผ๋ก ์ฌ์ฉ๋๋ ๋ฌธ์ฅ๋ ์๋ค. ๋ฌ์คํธ ํ๋ก๊ทธ๋๋ฐ ์ธ์ด๋ ์ธ๋ฏธ์ฝ๋ก (semicolon);
์ ๊ธฐ์ค์ผ๋ก ๋ฌธ์ฅ์ ๋ถ๋ณํ๋ค.let variable = 2 + 3; // ์ซ์ 5๋ฅผ "variable" ๋ณ์์ ์ด๊ธฐํ if 2 < 3 { statement; } // ๋ ผ๋ฆฌ๊ฐ ์ฐธ์ด๋ฉด "statement" ๋ฌธ์ฅ ์คํ
-
๋ธ๋ก(block)
ํ ๊ฐ ์ด์์ ๋ฌธ์ฅ๋ค์ ํ๊บผ๋ฒ์ ๊ด๋ฆฌํ ์ ์๋๋ก ๋ฌถ์ด๋์ ์์ค ์ฝ๋์ ๊ทธ๋ฃน์ด๋ค. ๋ธ๋ก ์์ ๋ ๋ค๋ฅธ ๋ธ๋ก์ด ์์ฃผํ ์ ์์ผ๋ฉฐ, ์ด๋ฅผ ๋ค์คํฐ๋ ๋ธ๋ก(nested block)์ด๋ผ๊ณ ๋ถ๋ฅธ๋ค. ๋ฌ์คํธ์์๋ ํ ์์ ์ค๊ดํธ
{}
๋ก ํ์๋๋ค.{ let variable = 2 + 3; if 2 < 3 { statement; } }
์๋ณ์(identifier)๋ ํ๋ก๊ทธ๋จ์ ๊ตฌ์ฑํ๋ ๋ฐ์ดํฐ๋ค์ ๊ตฌ๋ณํ๊ธฐ ์ํด ์ฌ์ฉ๋๋ ๋ช ์นญ์ด๋ค. ์ฆ, ์๋ณ์๋ ๊ฐ๋ฐ์๊ฐ ๋ฐ์ดํฐ์ ์ง์ ๋ถ์ฌ์ค ์ด๋ฆ์ด๋ค. ๋ฌ์คํธ ํ๋ก๊ทธ๋๋ฐ ์ธ์ด์์ ์๋ณ์๋ ์ ๋์ฝ๋ ํ์ค ๋ถ๋ก #31์ ์ค์ํ๋ฉฐ, ๊ฐ๋จํ ์ค๋ช ํ๋ฉด ๋ค์๊ณผ ๊ฐ๋ค.
- ์ํ๋ฒณ, ์ซ์, ๋ฐ์ค
_
๋ง ํ์ฉ (๊ทธ ์ธ ํน์๋ฌธ์ ๋ฐ ๊ณต๋ฐฑ ์ฌ์ฉ ๋ถ๊ฐ) - ์๋ณ์์ ์ฒซ ๋ฌธ์๋ ์ซ์๊ฐ ๋ ์ ์์
- ๋์๋ฌธ์ ๊ตฌ๋ถ ํ์
- ์์ฝ์ด ๊ธ์ง
์ฃผ์(comment)์ ํ๋ก๊ทธ๋จ์ ์์ค ์ฝ๋๋ก ์ทจ๊ธํ์ง ์์ ์คํ๋์ง ์๋ ์์ญ์ด๋ค. ํํ ์ฝ๋์ ๋ํ ๊ฐ๋จํ ์ ๋ณด๋ฅผ ๊ธฐ์ ํ๊ธฐ ์ํด ์ฌ์ฉ๋๋ ๋ฐ, ํฌ๊ฒ ๋น๋ฌธ์ ์ฃผ์ ๊ทธ๋ฆฌ๊ณ ๋ฌธ์ ์ฃผ์๋ก ๋๋์ด์ง๋ค.
๋น๋ฌธ์ ์ฃผ์(non-doc comments) | ๋ฌธ์ ์ฃผ์(doc comments) |
---|---|
์ผ๋ฐ์ ์ธ C/C++ ์ธ์ด ํ์์ ์ฃผ์๊ณผ ๋์ผํ๋ค. | ๋ฌธ์ ์ฃผ์์ ํ์ค(/// ) ๊ทธ๋ฆฌ๊ณ ๋ธ๋ก(/** */ )์ผ๋ก ์
๋ ฅํ ์ ์์ผ๋ฉฐ, ๋ฐ์ดํฐ์ ๋ํ ๊ฐ๋ตํ ์ค๋ช
์ ๊ธฐ์
ํ๋ ๋ฐ ์ฌ์ฉ๋๋ค. |
/*
๋ธ๋ก ์ฃผ์:
์ฝ๋ ์ฌ๋ฌ ์ค์ ์ฐจ์งํ๋ ์ฃผ์์ด๋ค.
*/
// ํ์ค ์ฃผ์: ์ฝ๋ ํ ์ค์ ์ฐจ์งํ๋ ์ฃผ์์ด๋ค. |
/**
๋ธ๋ก ๋ฌธ์ ์ฃผ์:
์ฝ๋ ์ฌ๋ฌ ์ค์ ์ฐจ์งํ๋ ์ฃผ์์ด๋ค.
*/
/// ํ์ค ๋ฌธ์ ์ฃผ์: ์ฝ๋ ํ ์ค์ ์ฐจ์งํ๋ ์ฃผ์์ด๋ค.
|
์ผ๋ฐ ์ฃผ์๊ณผ ๋ฌ๋ฆฌ, ์ฌ์ฉ์๊ฐ ์ ์ํ ๋ฐ์ดํฐ์ ๊ธฐ์
๋ ๋ฌธ์ ์ฃผ์์ doc
์ด๋ ํน์ํ ์์ฑ์ ์ ์ฅ๋์ด ์ ์๋ ๋ฐ์ดํฐ์ ๋ํ ์ค๋ช
์ ์ ์ํ ์์ค ์ฝ๋๋ฅผ ์ฐพ์๊ฐ์ง ์๊ณ ์๋ ๊ณง๋ฐ๋ก ๋ด์ฉ์ ์ดํด๋ณผ ์ ์๋ค.
๋ค์์ ์ง์ ๋ ํ์์ ๋ฐ๋ฅธ ๋ฐ์ดํฐ ์ฒ๋ฆฌ์ ๊ด์ฌํ๋ ๋ฌ์คํธ์ ๋งคํฌ๋ก๋ค์ ์๊ฐํ๋ค.
-
์ฝ์ ์ถ๋ ฅ
์ง์ ๋ ํ์๋๋ก ํ ์คํธ๋ฅผ ์ฝ์์ ๋ํ๋๋๋ก ์ถ๋ ฅํ๋ ๋ฐ ์ฌ์ฉ๋๋ค.
๋ฌ์คํธ์ ์ถ๋ ฅ ๋งคํฌ๋ก ์ถ๋ ฅ ๋งคํฌ๋ก ์ค๋ช print!
์ฃผ์ด์ง ํ์ ์ง์ ์์ ๋ฐ๋ผ ํ ์คํธ๋ฅผ ํฐ๋ฏธ๋์ ์ถ๋ ฅํ๋ค. println!
์ฃผ์ด์ง ํ์ ์ง์ ์์ ๋ฐ๋ผ ํ ์คํธ๋ฅผ ํฐ๋ฏธ๋์ ์ถ๋ ฅํ๋ฉฐ '\n'
์ค๋ฐ๊ฟ์ด ๊ธฐ๋ณธ์ ์ผ๋ก ๋ณด์ฅ๋๋ค.println!("Format: {:?}", 5);
-
๋ฒํผ ์ ๋ ฅ
์ง์ ๋ ํ์๋๋ก ํ ์คํธ๋ฅผ ๋ฒํผ๋ก ์ ๋ฌํ๋๋ก ์ ๋ ฅํ๋ ๋ฐ ์ฌ์ฉ๋๋ค. ์ ์ํ ์ ์ผ๋ก, ๋ณธ ๋งคํฌ๋ก๋ ์ฝ์์ฐฝ์ ์ฌ์ฉ์ ํ ์คํธ๋ฅผ ์ ๋ ฅ์ผ๋ก ๋ฐ๋ ๋งคํฌ๋ก๊ฐ ์ ๋ ์๋๋ค. ํต์ฌ ์ ์ถ๋ ฅ ๊ธฐ๋ฅ ๋ฐ ํน์ฑ์ ์ ๊ณตํ๋
std::io
์Write
ํน์ฑ์ด ์๊ตฌ๋๋ค.๋ฌ์คํธ์ ์ ๋ ฅ ๋งคํฌ๋ก ์ ๋ ฅ ๋งคํฌ๋ก ์ค๋ช write!
์ฃผ์ด์ง ํ์ ์ง์ ์ ๋ฐ๋ฅธ ํ ์คํธ๋ฅผ ํฐ๋ฏธ๋์ ์ถ๋ ฅํ๋ค. writeln!
์ฃผ์ด์ง ํ์ ์ง์ ์ ๋ฐ๋ฅธ ํ ์คํธ๋ฅผ ํฐ๋ฏธ๋์ ์ถ๋ ฅํ๋ฉฐ '\n'
์ค๋ฐ๊ฟ์ด ๊ธฐ๋ณธ์ ์ผ๋ก ๋ณด์ฅ๋๋ค.use std::io::Write; writeln!(&mut buffer, "Output: {:?}", 5);
ํ
์คํธ ์์ ํฌํจ๋ ์ค๊ดํธ {}
์๋ ์ธ์๋ก ์ ๋ฌ๋ ๋ฐ์ดํฐ๊ฐ ์ฝ์
๋ฐ ์์๋๋ค. ํนํ ์์์ ๊ธฐ์
๋ {:?}
์ ๋๋ฒ๊น
๋ชฉ์ ์ผ๋ก ์ค์ฌ์ฉ์ ์ ์ฉํ๊ธฐ ๋ถ์์ ํ์ง๋ง ํ๋ก๊ทธ๋จ ์ฝ๋๋ฅผ ์ดํดํ๋ ๋ฐ ๋์์ ์ค๋ค. ์์ธํ ๋ด์ฉ์ std::fmt
๋ชจ๋์ ์ฐธ๊ณ ํ๋๋ก ํ๋ค.
ํ์ถ ๋ฌธ์(escape character)๋ ๋ฐฑ์ฌ๋์ ๊ธฐํธ \
๋ฅผ ์ฌ์ฉํ๋ฉฐ, ๋ฌธ์์ด๋ก๋ถํฐ ํ์ถํ์ฌ ํ
์คํธ ๋ฐ์ดํฐ ๋ด์์ ํน์ ์ฐ์ฐ์ ์ํํ๋๋ก ํ๋ค. ์์์์ \n
ํ์ถ ๋ฌธ์๋ฅผ ์ฌ์ฉํ์ฌ ๋ฌธ์์ด ์ค๋ฐ๊ฟ์ ๊ตฌํํ ๊ฒ์ ๋ณด์ฌ์ฃผ์๋ค.
println!("Hello,\nWorld!");
Hello,
World!
์๋ฃํ(data type)์ ๋ฐ์ดํฐ๋ฅผ ์ด๋ป๊ฒ ํํํ ์ง ๊ฒฐ์ ํ๋ ์์์ด๋ฉฐ, ๋ฌ์คํธ์์๋ ๋ค์๊ณผ ๊ฐ์ด ์กด์ฌํ๋ค.
ํค์๋ | ์๋ฃํ | ํฌ๊ธฐ (๋ฐ์ดํธ) | ์ค๋ช |
---|---|---|---|
i8 (unsigned: u8 ) | ์ซ์ | 1 | 1๋ฐ์ดํธ ์ ์ |
i16 (unsigned: u16 ) | ์ซ์ | 2 | 2๋ฐ์ดํธ ์ ์ |
i32 (unsigned: u32 ) | ์ซ์ | 4 | 4๋ฐ์ดํธ ์ ์ |
i64 (unsigned: u64 ) | ์ซ์ | 8 | 8๋ฐ์ดํธ ์ ์ |
i128 (unsigned: u128 ) | ์ซ์ | 16 | 16๋ฐ์ดํธ ์ ์ |
isize (unsigned: usize ) | ์ซ์ | 16 (์ต์) | ํฌ์ธํฐ ํฌ๊ธฐ์ ์ ์; ์๋ฅผ ๋ค์ด x86๋ 32๋นํธ, ๊ทธ๋ฆฌ๊ณ x64๋ 64๋นํธ ์ ์๋ก ๊ณ์ฐ๋๋ค. |
f32 | ์ซ์ | 4 | 32๋นํธ ๋จ์ ๋ฐ๋ ์ค์ |
f64 | ์ซ์ | 8 | 64๋นํธ ๋ฐฐ์ ๋ฐ๋ ์ค์ |
f128 | ์ซ์ | 16 | 128๋นํธ 4๋ฐฐ์ ๋ฐ๋ ์ค์ |
bool | ๋ ผ๋ฆฌ | 1 | ์ฐธ(true ; 1) ํน์ ๊ฑฐ์ง(false ; 0) |
char | ํ ์คํธ | 4 | ๋จ์ผ UTF-32 ๋ฌธ์: 0x0000-0xD7FF ๋๋ 0xE000-0x10FFFF |
๋ฐ์ดํธ(byte)๋, ์ปดํจํฐ์์ ๋ฉ๋ชจ๋ฆฌ์ ์ ์ฅํ๋ ๊ฐ์ฅ ๊ธฐ๋ณธ์ ์ธ ๋จ์์ด๋ค. ์๋ฃํ๋ง๋ค ํฌ๊ธฐ๊ฐ ์ ํด์ง ์ด์ ๋ ํจ์จ์ ์ธ ๋ฉ๋ชจ๋ฆฌ ๊ด๋ฆฌ ์ฐจ์๋ ์์ผ๋ CPU ์ฐ์ฐ๊ณผ๋ ๊น์ ์ฐ๊ด์ฑ์ ๊ฐ๋๋ค. ํ ๋ฐ์ดํธ๋ ์ฌ๋ ๊ฐ์ ๋นํธ(bit)๋ก ๊ตฌ์ฑ๋๋ค.
์ฌ๊ธฐ์ unsigned๋, ์๋ฃํ ์ค์์ ์ต์์ ๋นํธ๋ฅผ ์ ์์ ๋ถํธ๋ฅผ ๊ฒฐ์ ํ๋ ์์๋ก ์ฌ์ฉํ์ง ์๋๋ค. ์๋์ 16๋นํธ ์ ์ํ์ธ i16
๋ ์๋ ์ต์์ ๋นํธ๋ฅผ ์ ์ธํ ๋๋จธ์ง 15๊ฐ์ ๋นํธ๋ก ์ ์๋ฅผ ํํํ๋ค. ๋ฐ๋ฉด unsigned ์๋ฃํ์ธ u16
์ ์์ ์ ์๋ฅผ ๋ํ๋ผ ์ ์์ง๋ง, 16๊ฐ์ ๋นํธ๋ก ์์ ์ ์๋ฅผ ๋ ๋ง์ด ํํํ ์ ์๋ค.
i16 // ํํ ๊ฐ๋ฅ ๋ฒ์: -32768 ~ +32767
u16 // ํํ ๊ฐ๋ฅ ๋ฒ์: +0 ~ +65535
๊ทธ ์ธ์ ์๋ฃํ๋ค์ ์ฐจํ ๋ฌ์คํธ ํ๋ก๊ทธ๋๋ฐ ์ธ์ด์ ๋ํ ๊ฐ๋ ์ ์๊ฐํ๋ฉด์ ํจ๊ป ์ค๋ช ํ ์์ ์ด๋ค.
์๋ฃํ ๋ณํ(type conversion)์ ๋ฐ์ดํฐ๋ฅผ ๋ค๋ฅธ ์๋ฃํ์ผ๋ก ๋ฐ๊พธ๋ ์์ ์ด๋ฉฐ, ๋ถ๊ฐํผํ๊ฒ ๋ฐ์ดํฐ๊ฐ ์์ค๋ ์ ์์ผ๋ฏ๋ก ์ ์ํ๋๋ก ํ๋ค. ๋ฌ์คํธ๋ ์ผ๋ฐ์ ์ผ๋ก ๊ฐ์ ๋ณํ(coercion)์ด๋ ์์์ ์๋ฃํ ๋ณํ์ ์ง์ํ์ง ์์ผ๋ฉฐ, ์๋ ๋ณํ์ ์ค๋ก์ง ํน์ ์์น์ ์ฝ๋์์ ์ ํ๋ ์๋ฃํ์๋ง ๊ตญํ๋๋ค.
-
์๋ฃํ ์บ์คํ (type casting)
๋ช ์์ ์๋ฃํ ๋ณํ์ ํด๋นํ๋ฉฐ, ๋ฐ์ดํฐ์ ์ฐ๋ณ์ ์ด์ง ์ฐ์ฐ์
as
์ ํจ๊ป ๋ณํ ์๋ฃํ์ ๊ธฐ์ ํ์ฌ lvalue๋ก ์ ๋ฌํ๋ค. ์์์ ์๋ฃํ์ ์๋ํ ๊ฒฝ์ฐ, ๋ฌ์คํธ๋ ์๋ฃํ ๋ถ์ผ์น๋ผ๋ ๋ช ๋ชฉ์ผ๋ก ์ปดํ์ผ ์ค๋ฅ๋ฅผ ์๋ฆฐ๋ค.let variable = 'A'; println!("The ascii value of the variable is {}", variable as u8);
size_of
ํจ์๋ ์๋ฃํ์ ๋ฉ๋ชจ๋ฆฌ ํฌ๊ธฐ๋ฅผ ๋ฐ์ดํธ๋ก ๋ฐํํ๋ค. ์ ํํ ์ค๋ช
์ "๋ฐฐ์ด์ ๋ค์ ์์ ๊ฐ ์คํ์
"์ ๋ฐํํ๋ฉฐ, ๋ฐ์ดํฐ ์ ๋ ฌ์ ์ฝ์
๋ ํจ๋ฉ๋ ํฌํจํ๋ค.
size_of_val
: (์๋ฃํ์ ์ ์ ์๋ ๊ฒฝ์ฐ) ์ฐธ์กฐ๋ ๊ฐ์ ๋ฉ๋ชจ๋ฆฌ ํ ๋น ํฌ๊ธฐ๋ฅผ ๋์ ์ผ๋ก ํ์ธํ์ฌ ๋ฐํํ๋ค.
std::mem::size_of::<char>(); // ํฌ๊ธฐ: 4๋ฐ์ดํธ
let variable: u128 = 0;
std::mem::size_of_val(&variable); // ํฌ๊ธฐ: 16๋ฐ์ดํธ
๋ณ์(variable)๋ ๋ค์ ๋ฐ์ธ๋ฉ ๊ธฐ๋ฒ์ ํตํด ์ง์ ๋ ์๋ฃํ์ ๋ฐ์ดํฐ์ ์ฎ์ฌ ์ ๊ทผํ๋ ๋ฐ ์ฌ์ฉ๋๋ ์๋ณ์์ด๋ฉฐ, ๊ฐ๋จํ ์ค๋ช
ํ์๋ฉด ๋ฐ์ดํฐ์ ์ด๋ฆ์ ๋ถ์ธ ๊ฒ์ด๋ค. ์๋ ์ฝ๋๋ variable
๋ณ์๋ฅผ "์ ์ธ(declaration)"ํ ๋ค์ ์์ 3์ ๋ฐ์ธ๋ฉํ๋ค. ์ฌ๊ธฐ์ ์ต์ด ๋ฐ์ธ๋ฉ์ "์ด๊ธฐํ(initialization)"๋ผ๊ณ ๋ถ๋ฅด๋ฉฐ, ์ด๊ธฐํ๋์ง ์์ ์ฑ ๋ณ์ ํธ์ถ์ ํ์ฉ๋์ง ์์ง๋ง ์ ์ธ๋ ์ดํ ๋์ค์ ๋ฐ์ธ๋ฉ๋ ์ ์๋ค.[์ถ์ฒ]
๋ถ๋ณ(immutable) ๋ณ์ | ๊ฐ๋ณ(mutable) ๋ณ์ |
---|---|
let variable = 3; |
let mut variable = 3; |
์ด๊ธฐํ ์ดํ์ ๋ณ์๋ ๋ค๋ฅธ ๊ฐ์ผ๋ก ๋ณ๊ฒฝ๋ ์ ์์ผ๋ฉฐ, ์ด๋ ๋ฌ์คํธ์ ๊ธฐ๋ณธ์ ์ธ ํน์ฑ ์ค ํ๋์ด๋ค. | ํ ํ๋ก๊ทธ๋๋ฐ ์ธ์ด์ฒ๋ผ ์ด๊ธฐํ๊ฐ ์ด๋ฃจ์ด์ง ์ดํ์๋ ํ ๋น ํํ์์ ํตํด ์๋ก์ด ๊ฐ์ ์ ๋ฌ ๋ฐ์ ์ ์๋๋ก ์ ์ธ๋ ๋ณ์์ด๋ค. |
|
|
์ปดํ์ผ๋ฌ๋ ๋ฐ์ดํฐ์ ๊ฐ๊ณผ ์ฌ์ฉ์ฒ๋ฅผ ๊ธฐ๋ฐํ์ฌ ๋ณ์์ ์๋ฃํ์ ์ถ๋ก ํ ์ ์์ผ๋, ๋ค์๊ณผ ๊ฐ์ด ๋ช ์์ ์ผ๋ก ๋ณ์์ ์๋ฃํ์ ์ง์ ํ ์ ์๋ค.
let variable: u8 = 3;
๊ฑฐ์ ๋ชจ๋ ํ๋ก๊ทธ๋๋ฐ ์ธ์ด๋ ํ ๋น ๊ธฐํธ๋ฅผ ๊ธฐ์ค์ผ๋ก ์ผ์ชฝ์๋ ํผํ ๋น์(๋ณ์), ์ค๋ฅธ์ชฝ์๋ ํผํ ๋น์๋ก ์ ๋ฌํ๋ ค๋ ํํ์(๊ฐ ํน์ ๋ฐ์ดํฐ)์ด ์์นํ๋ค. ๋ฐ๋๋ก ๋์ฌ์ง ๊ฒฝ์ฐ, ์ค๋ฅ๊ฐ ๋ฐ์ํ๊ฑฐ๋ ์์น ์๋ ๊ฒฐ๊ณผ๊ฐ ๋์ถ๋ ์ ์๋ค.
์ฐ์ฐ์(operator)๋ ํผ์ฐ์ฐ ๋ฐ์ดํฐ๋ฅผ ์กฐ์ํ ์ ์๋ ๊ฐ์ฅ ๊ฐ๋จํ ํํ์ ์ฐ์ฐ ์์์ด๋ค. ์ฐ์ฐ์๋ ํผ์ฐ์ฐ์์ ์ ๋๋ถ, ์ ๋ฏธ๋ถ, ํน์ ๋ ๋ฐ์ดํฐ ์ฌ์ด์ ์์น์์ผ ์ฌ์ฉํ๋ค. ๊ฐ๋ ์ฑ์ ์ํด ๋ฐ์ดํฐ์ ์ฐ์ฐ์ ์ฌ์ด์ ๊ณต๋ฐฑ์ ๋ฃ์ด๋ ์ฐ์ฐ์๋ ์๋ฌด๋ฐ ์ํฅ์ ์ฃผ์ง ์๋๋ค. ๋ค์์ ๋ฌ์คํธ ์ฐ์ฐ์๋ค์ ๊ฐ๋ตํ ์๊ฐํ๋ค.
์ฐ์ฐ์ | ์ฐ์ | ์ค๋ช |
---|---|---|
+ | ๋ง์ | ์ข์ธก๊ณผ ์ฐ์ธก ํผ์ฐ์ฐ์์ ๊ฐ์ ๋ํ์ฌ ๋ฐํํ๋ค. |
- | ๋บ์ | ์ข์ธก ํผ์ฐ์ฐ์์์ ์ฐ์ธก ํผ์ฐ์ฐ์๋ฅผ ๋บ ๊ฐ์ ๋ฐํํ๋ค. |
* | ๋ง์ | ์ข์ธก ํผ์ฐ์ฐ์๋ฅผ ์ฐ์ธก ํผ์ฐ์ฐ์์ ๊ฐ๋งํผ ๊ณฑํ์ฌ, ์ฆ ๋ฐ๋ณต ๋ง์ ํ์ฌ ๋ฐํํ๋ค. |
/ | ๋๋์ | ์ข์ธก ํผ์ฐ์ฐ์์์ ์ฐ์ธก ํผ์ฐ์ฐ์๋ฅผ ๋๋ ๋ชซ์ ๋ฐํํ๋ค. |
% | ๋ชจ๋๋ฌ | ์ข์ธก ํผ์ฐ์ฐ์์์ ์ฐ์ธก ํผ์ฐ์ฐ์๋ฅผ ๋๋ ๋๋จธ์ง๋ฅผ ๋ฐํํ๋ค. |
์ฐ์ฐ์ | ๋นํธ์ฐ์ฐ | ์ค๋ช |
---|---|---|
& | AND | ๋ ํผ์ฐ์ฐ์์ ๊ฐ ๋นํธ๋ฅผ ๋น๊ตํ์ฌ ๋ชจ๋ 1์ด๋ฉด 1์, ์๋๋ฉด 0์ ๊ณ์ฐํ์ฌ ๋ฐํํ๋ค. |
| | OR | ๋ ํผ์ฐ์ฐ์์ ๊ฐ ๋นํธ๋ฅผ ๋น๊ตํ์ฌ ํ๋๋ผ๋ 1์ด ์์ผ๋ฉด 1์, ์๋๋ฉด 0์ ๊ณ์ฐํ์ฌ ๋ฐํํ๋ค. |
^ | XOR | ๋ ํผ์ฐ์ฐ์์ ๊ฐ ๋นํธ๋ฅผ ๋น๊ตํ์ฌ ๊ฐ์ด ๊ฐ์ผ๋ฉด 0์, ๋ค๋ฅด๋ฉด 1์ ๊ณ์ฐํ์ฌ ๋ฐํํ๋ค. |
! | NOT | ํผ์ฐ์ฐ์์ ๊ฐ ๋นํธ๋ง๋ค ๋ฐ์ ์ํจ ๊ฐ์ ๋ฐํํ๋ค. |
<< | ์ขํฅ ์ํํธ | ํผ์ฐ์ฐ์(ๅทฆ)์ ๋นํธ๋ฅผ ์ ๋ฐ์ ์ผ๋ก ์ผ์ ๊ฐ(ๅณ)๋งํผ ์ผ์ชฝ์ผ๋ก ์ด๋์ํจ๋ค. |
>> | ์ฐํฅ ์ํํธ | ํผ์ฐ์ฐ์(ๅทฆ)์ ๋นํธ๋ฅผ ์ ๋ฐ์ ์ผ๋ก ์ผ์ ๊ฐ(ๅณ)๋งํผ ์ค๋ฅธ์ชฝ์ผ๋ก ์ด๋์ํจ๋ค. |
๋จ์ ํ ๋น ์ฐ์ฐ์๋ฅผ ์ฐ์ ๋ฐ ๋นํธ ์ฐ์ฐ์์ ์กฐํฉํ์ฌ ์ฝ๋๋ฅผ ๋์ฑ ๊ฐ๊ฒฐํ๊ฒ ์์ฑํ ์ ์์ผ๋ฉฐ, ์๋๋ ๋ค์ํ ํ ๋น ์ฐ์ฐ์ ์ค ์ผ๋ถ๋ง ๋ณด์ฌ์ค๋ค.
์ฐ์ฐ์ | ํ ๋น | ์ค๋ช |
---|---|---|
= | ๋จ์ ํ ๋น | ํผ์ฐ์ฐ์(ๅณ)๊ฐ ๋ณ์์ ๊ฐ์ ํผํ ๋น์(ๅทฆ)๋ก ํ ๋น๋ ๊ฐ์ ๋ฐํํ๋ค. |
+= | ๋ง์ ๋์ |
x += y; // ๋์ผ: x = x + y; |
*= | ๊ณฑ์ ๋์ |
x *= y; // ๋์ผ: x = x * y; |
&= | AND ๋์ |
x &= y; // ๋์ผ: x = x & y; |
<<= | ์ขํฅ ์ํํธ ๋์ |
x <<= y; // ๋์ผ: x = x << y; |
์๋ ๋น๊ต ์ฐ์ฐ์์ ์ค๋ช
์ ์ฐธ์ ๋ฐํํ ์กฐ๊ฑด์ ์๊ฐํ๋ฉฐ, ๊ทธ ์ธ์๋ ๋ชจ๋ false
๋ฅผ ๋ฐํํ๋ค.
์ฐ์ฐ์ | ๊ด๊ณ | ์ค๋ช |
---|---|---|
> | ์ด๊ณผ | ์ข์ธก ํผ์ฐ์ฐ์๊ฐ ์ฐ์ธก ํผ์ฐ์ฐ์๋ณด๋ค ํฌ๋ฉด true ๋ฅผ ๋ฐํํ๋ค. |
< | ๋ฏธ๋ง | ์ข์ธก ํผ์ฐ์ฐ์๊ฐ ์ฐ์ธก ํผ์ฐ์ฐ์๋ณด๋ค ์์ผ๋ฉด true ๋ฅผ ๋ฐํํ๋ค. |
>= | ์ด์ | ์ข์ธก ํผ์ฐ์ฐ์๊ฐ ์ฐ์ธก ํผ์ฐ์ฐ์๋ณด๋ค ํฌ๊ฑฐ๋ ๊ฐ์ผ๋ฉด true ๋ฅผ ๋ฐํํ๋ค. |
<= | ์ดํ | ์ข์ธก ํผ์ฐ์ฐ์๊ฐ ์ฐ์ธก ํผ์ฐ์ฐ์๋ณด๋ค ์๊ฑฐ๋ ๊ฐ์ผ๋ฉด true ๋ฅผ ๋ฐํํ๋ค. |
== | ๋์ผ | ๋ ํผ์ฐ์ฐ์์ ๊ฐ์ด ๊ฐ์ผ๋ฉด true ๋ฅผ ๋ฐํํ๋ค. |
!= | ์์ด | ๋ ํผ์ฐ์ฐ์์ ๊ฐ์ด ๊ฐ์ง ์์ผ๋ฉด true ๋ฅผ ๋ฐํํ๋ค. |
(๋
ผ๋ฆฌ ๋ถ์ ์ ์ ์ธํ) ์๋ ๋
ผ๋ฆฌ ์ฐ์ฐ์์ ์ค๋ช
์ ์ฐธ์ ๋ฐํํ ์กฐ๊ฑด์ ์๊ฐํ๋ฉฐ, ๊ทธ ์ธ์๋ ๋ชจ๋ false
๋ฅผ ๋ฐํํ๋ค.
์ฐ์ฐ์ | ๋ ผ๋ฆฌ | ์ค๋ช |
---|---|---|
&& | ๋ ผ๋ฆฌ๊ณฑ | ์ข์ธก ๊ทธ๋ฆฌ๊ณ ์ฐ์ธก ๋ช
์ (ํผ์ฐ์ฐ์)๊ฐ ๋ชจ๋ ์ฐธ์ด๋ฉด true ๋ฅผ ๋ฐํํ๋ค. |
|| | ๋ ผ๋ฆฌํฉ | ์ข์ธก ๋๋ ์ฐ์ธก ๋ช
์ (ํผ์ฐ์ฐ์)๊ฐ ํ๋๋ผ๋ ์ฐธ์ด๋ฉด true ๋ฅผ ๋ฐํํ๋ค. |
! | ๋ถ์ | ๋ช ์ (ํผ์ฐ์ฐ์)๊ฐ ์ฐธ์ด๋ฉด ๊ฑฐ์ง์ผ๋ก, ํน์ ๊ทธ ๋ฐ๋๋ก ๋ฐ์ ๋ ๊ฐ์ ๋ฐํํ๋ค. |
๋ฌ์คํธ ์ธ์ด๋ ์ฌ๋ฌ ๋ฐ์ดํฐ๋ฅผ ํ๋์ ๋ณ์๋ก ์ ์ฅํ๋ ๋ณตํฉ ์๋ฃํ(compound type)์ ๊ธฐ๋ณธ์ ์ผ๋ก ์ ๊ณตํ๋ค. ์๋๋ ๋ฌ์คํธ์ ๋ํ์ ์ธ ๋ ์ ํ์ ๋ณตํฉ ์๋ฃํ์ ๊ฐ๋ตํ๊ฒ ์๊ฐํ๋ค.
๋ฐฐ์ด(array)์ ๋์ผํ ์๋ฃํ์ ๋ฐ์ดํฐ๋ฅผ ์ผ๋ จ์ ์์๋ก ๋ด๋ ๋ณตํฉ ์๋ฃํ์ด๋ค. ๋ฐฐ์ด์ ์ ์ธํ ๋ ์๋ฃํ์ ์ง์ ํ๋ ๊ตฌ๋ฌธ์ ๋๊ดํธ []
๋ฅผ ํ์ฉํ์ฌ ๋ฐ์ดํฐ ์ ํ ๋ฐ ์ฉ๋ ํฌ๊ธฐ๋ฅผ (์ ์ ๋ฆฌํฐ๋ด์ด๋ ์์๋ก) ๊ธฐ์
ํ๋ฉฐ, ํ ๋ฒ ์ ์๋ ํฌ๊ธฐ๋ ๋ณ๊ฒฝ์ด ๋ถ๊ฐํ๋ค.
let arr : [u8 ; 3] = [value1, value2, value3];
๋ฐฐ์ด ์ด๊ธฐํ๋ง์ผ๋ก ๋ฌ์คํธ ์ปดํ์ผ๋ฌ๋ ๋ฐฐ์ด์ ์๋ฃํ๊ณผ ํฌ๊ธฐ๋ฅผ ์ถ๋ก ํ ์ ์์ผ๋ฏ๋ก ์๋ต ๊ฐ๋ฅํ๋ค. ์ด๊ธฐํ ๋ฐฉ๋ฒ์ ์์ ์์๋ฅผ ํฌํจํ ๋ ๊ฐ์ง ๋ฐฉ๋ฒ์ด ์กด์ฌํ๋ค.
๊ฐ๋ณ์ ์์ ์ด๊ธฐํ | ๋ฐ๋ณต์ ์์ ์ด๊ธฐํ |
---|---|
let arr = [value1, value2, value3]; |
let arr = [0; 3]; // ๊ฐ 0์ ์ธ ๋ฒ ์ฐ์ ์ด๊ธฐํ |
- ๋ฉ๋ชจ๋ฆฌ ์ ๊ทผ ์์ ์ฑ์ด ๋ถ๊ฐ๋๋ ๋ฌ์คํธ ์ธ์ด์ ํน์ฑ์, ๋ฐฐ์ด ์ด๊ธฐํ๋ ์์ ๊ฐ์๋ฅผ ์ด๊ณผํ๊ฑฐ๋ ๋ฏธ๋ฌํด์๋ ์ปดํ์ผ๋ฌ ์ค๋ฅ๊ฐ ๋ฐ์ํ๋ค.
๋ฐฐ์ด์ ๊ฐ ์์์ ํ ๋น๋ ๋ฐ์ดํฐ๋ ๋๊ดํธ []
๋ฅผ ์ฌ์ฉํด 0๋ฒ๋ถํฐ ์์ํ๋ ์ธ๋ฑ์ค ์์น๋ฅผ ํธ์ถํ ์ ์๋ค. ๋ง์ผ mut
ํค์๋๋ฅผ ์ถ๊ฐํ๋ฉด ๊ฐ ์์์ ๋ฐ์ดํฐ๋ฅผ ๋ณ๊ฒฝํ ์ ์๋ ๊ฐ๋ณ ๋ฐฐ์ด๋ก ์ ์ธ๋๋ค.
let mut arr = [value1, value2, value3];
println!("{}", arr[0]); // ์ถ๋ ฅ: value1
println!("{}", arr[1]); // ์ถ๋ ฅ: value2
arr[1] = value4;
println!("{:?}", arr[1]); // ์ถ๋ ฅ: [value1, value4, value3]
๋ฐฐ์ด์ ๋ ๋ค๋ฅธ ๋ฐฐ์ด์ ์์๋ก ๊ฐ์ง ์ ์์ผ๋, ์๋ฃํ์ด ๋์ผํด์ผ ํ๋ฉฐ ์์๋ก ์์ฉํ๋ ๋ฐฐ์ด๋ค์ ํฌ๊ธฐ๋ ๋ชจ๋ ๊ฐ์์ผ ํ๋ ์ ์ฝ์ ๊ฐ๋๋ค.
let arr : [[u8; 3]; 2] = [[1, 2, 3],
[4, 5, 6]];
println!("{}", arr[0][1]); // ์ถ๋ ฅ: 2
println!("{}", arr[1][2]); // ์ถ๋ ฅ: 6
ํํ(tuple)์ ๋ค์ํ ์๋ฃํ์ ๋ฐ์ดํฐ๋ฅผ ์ผ๋ จ์ ์์๋ก ๋ด๋ ๋ณตํฉ ์๋ฃํ์ด๋ค. ํํ์ ์ ์ธํ ๋ ์๋ฃํ์ ์ง์ ํ๋ ๊ตฌ๋ฌธ์ ์๊ดํธ ()
๋ฅผ ํ์ฉํ์ฌ ๋ฐ์ดํฐ ์ ํ์ ์์๋๋ก ๊ธฐ์
ํ๋ฉฐ, ํ ๋ฒ ์ ์๋ ํํ ํฌ๊ธฐ์ ์๋ฃํ ์์๋ ๋ณ๊ฒฝ์ด ๋ถ๊ฐํ๋ค.
let tuple : (i32, char, bool) = (3, 'A', true);
ํํ ์ด๊ธฐํ๋ง์ผ๋ก ๋ฌ์คํธ ์ปดํ์ผ๋ฌ๋ ํํ์ ์๋ฃํ๊ณผ ํฌ๊ธฐ๋ฅผ ์ถ๋ก ํ ์ ์์ผ๋ฏ๋ก ์๋ต ๊ฐ๋ฅํ๋ค.
ํํ์ ๊ฐ ์์์ ํ ๋น๋ ๋ฐ์ดํฐ๋ ๋งด๋ฒ ์ ๊ทผ ์ฐ์ฐ์ .
๋ฅผ ์ฌ์ฉํด 0๋ฒ๋ถํฐ ์์ํ๋ ์ธ๋ฑ์ค ์์น๋ฅผ ํธ์ถํ ์ ์๋ค. ๋ง์ผ mut
ํค์๋๋ฅผ ์ถ๊ฐํ๋ฉด ๊ฐ ์์์ ๋ฐ์ดํฐ๋ฅผ ๋ณ๊ฒฝํ ์ ์๋ ๊ฐ๋ณ ํํ๋ก ์ ์ธ๋๋ค.
let mut tuple = (3, 'A', true);
println!("{}", tuple.0); // ์ถ๋ ฅ: 3
println!("{}", tuple.1); // ์ถ๋ ฅ: A
tuple.1 = 'B';
println!("{:?}", tuple); // ์ถ๋ ฅ: (3, 'B', true)
์ ์ด๋ฌธ(control statement)์ ์ฝ๋ ์คํ์ ์ ์ดํ๋ ๋ฌธ์ฅ์ ๊ฐ๋ฆฌํค๋ฉฐ, ํ๋ก๊ทธ๋๋ฐ์ ์์ด ๊ธฐ์ด์ ์ด๋ฉด์ ๊ฐ์ฅ ํํ ์ฌ์ฉ๋๋ ์ฝ๋ ์ ํ ์ค ํ๋์ด๋ค. ์ ์ด๋ฌธ์ ํฌ๊ฒ ์ธ ๋ถ๋ฅ๋ก ๋๋๋ฉด ์กฐ๊ฑด๋ฌธ, ๋ฐ๋ณต๋ฌธ, ๊ทธ๋ฆฌ๊ณ ์ด๋๋ฌธ์ด ์กด์ฌํ๋ค.
์กฐ๊ฑด๋ฌธ(conditional statement)์ ์ฃผ์ด์ง ์กฐ๊ฑด์ ๋ ผ๋ฆฌ์ ๋ฐ๋ผ์ ์ฝ๋ ์คํ ์ฌ๋ถ๋ฅผ ๊ฒฐ์ ํ๋ ์ ์ด๋ฌธ์ด๋ค:
if
์กฐ๊ฑด๋ฌธ์ ์กฐ๊ฑด ํน์ ๋
ผ๋ฆฌ๊ฐ ์ฐธ์ผ ๊ฒฝ์ฐ ์ฝ๋๋ฅผ ์คํํ๋ฉฐ, ๊ฑฐ์ง์ผ ๊ฒฝ์ฐ์๋ ์ฝ๋๋ฅผ ์คํํ์ง ์๋๋ค.
if condition {
statements;
}
-
else
์กฐ๊ฑด๋ฌธ๋จ๋ ์ผ๋ก ์ฌ์ฉ๋ ์ ์์ผ๋ฉฐ ๋ฐ๋์
if
์กฐ๊ฑด๋ฌธ ์ดํ์ ์ฌ์ฉ๋์ด์ผ ํ๋ค. ์กฐ๊ฑด๋ถ๊ฐ ๊ฑฐ์ง์ผ๋ก ํ์ ๋๋ฉด ์คํํ ์ฝ๋๋ฅผ ํฌํจํ๋ค.if condition { statements; } else { statements; }
-
else if
์กฐ๊ฑด๋ฌธelse
์if
์กฐ๊ฑด๋ฌธ์ ์กฐํฉ์ผ๋ก ์ด์ ์กฐ๊ฑด์ด ๊ฑฐ์ง์ผ ๋ ์๋ก์ด ์กฐ๊ฑด์ ์ ์ํ๋ค.if condition { statements; } else if condition { statements; } else { statements; }
match
์กฐ๊ฑด๋ฌธ์ ์ ๋ฌ๋ฐ์ ์ธ์๋ฅผ ์ผํ๋ก ๊ตฌ๋ถ๋ ๊ฐ matcharm์ ์์์๋ถํฐ ์์๋๋ก ํจํด ์ผ์น ์ฌ๋ถ๋ฅผ ๋น๊ตํ์ฌ, ์ฐธ์ผ ๊ฒฝ์ฐ ํด๋น ์ง์ ๋ถํฐ ์ฝ๋๋ฅผ ์คํํ๊ณ ๊ฑฐ์ง์ผ ๊ฒฝ์ฐ์๋ ์์๋ก ๋์ด๊ฐ๋ค. ์ ํ์ฌํญ์ผ๋ก ๋ง์ง๋ง _
matcharm ๊ฐ์ง๋ ์ด๋ ํ ๊ฒฝ์ฐ์๋ ๋ถํฉํ์ง ์์ผ๋ฉด ์คํ๋๋ ํจํด์ด๋ค.
match argument {
matcharm => expression,
matcharm => expression,
_ => expression
}
match
์กฐ๊ฑด๋ฌธ์ ํ ํ๋ก๊ทธ๋๋ฐ ์ธ์ด์์ ์๊ฐ๋๋ switch
์กฐ๊ฑด๋ฌธ๊ณผ ์ ์ฌํ์ง๋ง, ๋ ๋ฒ์ฉ์ ์ธ "ํจํด ์ผ์น" ์ฌ๋ถ๋ฅผ ํ์ธํ๋ ์ ์์ ์ฐจ์ด๊ฐ ์กด์ฌํ๋ค. ํ์ด์ฌ 3.10๋ถํฐ ์๊ฐ๋ match
์กฐ๊ฑด๋ฌธ ๋ํ ์ด์ ๋์ผํ ๋ฐฉ์์ผ๋ก ๋์ํ๋ค. ์์ธํ ๋ด์ฉ์ ๋ฌ์คํธ์ ํจํด ๊ตฌ๋ฌธ์ ์ฐธ๊ณ ํ๋๋ก ํ๋ค.
๋ฐ๋ณต๋ฌธ(loop statement)์ ์ฃผ์ด์ง ์กฐ๊ฑด์ ๋ ผ๋ฆฌ์ ๋ฐ๋ผ์ ์ฝ๋๋ฅผ ์ผ๋ง๋ ๋ฐ๋ณต์ ์ผ๋ก ์คํํ ์ง ๊ฒฐ์ ํ๋ ์ ์ด๋ฌธ์ด๋ค:
loop
๋ฐ๋ณต๋ฌธ์ ์์ ์ ์๋ ์ฝ๋๋ฅผ ๋ฌด์กฐ๊ฑด ๋ฐ๋ณต์ ์ผ๋ก ์คํํ๋ค.
loop {
statements;
}
๋ฐ๋ณต ์คํ์ ์ค๋จํ๊ธฐ ์ํด์๋ break
ํ์ถ๋ฌธ์ด ํ์ํ๋ค. ๋น๋ก ๋ฐ๋ณต๋ฌธ์ผ๋ก ์๊ฐํ์์ผ๋, ์๋์ ๊ฐ์ด ํ์ถ๋ฌธ์ ํ์ฉํ ๊ฐ์ ๋ฐํํ๋ ํํ์์ฒ๋ผ ์ฝ๋๋ฅผ ์์ฑํ ์ ์๋ค (loop
๋ฐ๋ณต๋ฌธ ํ์ ).
let mut counter = 0;
let variable = loop {
counter += 1;
if counter > 10 {
// counter = 11์ด ๋๋ฉด ์ง์
๋์ด ์คํ
break counter * 10;
}
};
println!("{}", variable);
110
while
๋ฐ๋ณต๋ฌธ์ ์กฐ๊ฑด ํน์ ๋
ผ๋ฆฌ๊ฐ ์ฐธ์ผ ๋์ ์ฝ๋๋ฅผ ๋ฐ๋ณต์ ์ผ๋ก ์คํํ๋ฉฐ, ๊ฑฐ์ง์ผ ๊ฒฝ์ฐ์๋ ๋ฐ๋ณต๋ฌธ์ ์ข
๋ฃํ๋ค.
while condition {
statements;
}
for
๋ฐ๋ณต๋ฌธ์ ์ ํจํ ๋ฒ์ ๋ด์์ ์ฝ๋๋ฅผ ๋ฐ๋ณต์ ์ผ๋ก ์คํํ๊ณ , ๋ฒ์์ ๋ชจ๋ ๊ฐ์ด ๋ฐ๋ณต๋๋ฉด ์ข
๋ฃํ๋ค.
for index in iterator {
statements;
}
์ฌ๊ธฐ์ ๋ณ์ index
๋ iterable
์์ ๊ฐ์ ์ป๊ณ , ๋ด๋ถ์ ์คํ๋ฌธ์ ๋ ์ด์ ๋ถ๋ฌ์ฌ ๊ฐ์ด ์์ ๋๊น์ง ํ๋์ฉ ๋ฐ๋ณตํ๋ค. ํํ ๋ฐ๋ณต๋ฌธ์ ์ฌ์ฉ๋๋ iterable
๋ฐ์ดํฐ๋ก ๋ฐฐ์ด, ๋ฌธ์์ด ๋ฑ์ด ์๋ค.
์ด๋๋ฌธ(jump statement)์ ์๋ฌด๋ฐ ์กฐ๊ฑด์ด ํ์์์ด ์ฝ๋ ์คํ ์ง์ ์ ์ด๋์ํค๋ ์ ์ด๋ฌธ์ด๋ค:
break
ํ์ถ๋ฌธ์ (1) ๋ฐ๋ณต๋ฌธ์ ์กฐ๊ธฐ ์ข
๋ฃ์ํค๊ฑฐ๋, (2) switch
์กฐ๊ฑด๋ฌธ์์ ๊ฒฝ์ฐ์ ๋ฐ๋ผ ์คํ๋์ด์ผ ํ ์ฝ๋๋ฅผ ๊ตฌ๋ถ์ง๊ธฐ ์ํด ์ฌ์ฉ๋๋ค.
continue
์ฐ์๋ฌธ์ ๋ฐ๋ณต๋ฌธ์ ์ข
๋ฃํ์ง ์์ ์ฑ ๋๋จธ์ง ์คํ ์ฝ๋๋ฅผ ์ ๋ถ ๋ฌด์ํ๊ณ ๋ฐ๋ณต๋ฌธ์ ์กฐ๊ฑด๋ถ๋ก ๋๋์๊ฐ๋ค.
return
๋ฐํ๋ฌธ์ ํจ์๋ฅผ ์ข
๋ฃํ๋ฉด์ ์ง์ ๋ ์๋ฃํ์ผ๋ก ๋ฐ์ดํฐ๋ฅผ ๋ฐํํ๋ค. ํ๋จ์ ์ฝ๋๊ฐ ๋จ์ ์์์๋ ๋ถ๊ตฌํ๊ณ ๋ฐํ๋ฌธ์ด ์คํ๋๋ฉด ํจ์๋ ์ฆ์ ์ข
๋ฃ๋๋ค.
// return ๋ฐํ๋ฌธ์ด ์๋ ์ฌ์ฉ์ ์ ์ ํจ์
fn function() -> i32 {
println!("Hello World!");
return 1 + 2;
}
println!("{}", function());
Hello World!
3
๋ฌ์คํธ ์ธ์ด๊ฐ ํ ํ๋ก๊ทธ๋๋ฐ ์ธ์ด์ ๋นํด ์ด๋ ค์ด ์ด์ ์ค ํ๋๋ ๋ฐ๋ก ๋ฉ๋ชจ๋ฆฌ ๊ด๋ฆฌ๋ฅผ ์์ ๊ถ(ownership)์ด๋ ์๋ก์ด ๊ฐ๋ ์ ๋์ ํ์๊ธฐ ๋๋ฌธ์ด๋ค. ๋ณธ ์ฅ์ ์์ ๊ถ์ ๊ฐ๋ ๊ณผ ๋์์ ์๊ฐํ๋ค.
์ฐธ๊ณ : Defining Modules to Control Scope and Privacy - The Rust Programming Language
๋ชจ๋(module)์ ํจ์, ๊ตฌ์กฐ์ฒด, ์ฌ์ง์ด ํ ๋ชจ๋์ ํฌํจํ ์ฝ๋ ํญ๋ชฉ๋ค์ ๋ ผ๋ฆฌ ๋จ์๋ก ๋๋ ์งํฉ์ฒด์ด๋ค.