Skip to content

Latest commit

ย 

History

History
507 lines (354 loc) ยท 48 KB

Rust.md

File metadata and controls

507 lines (354 loc) ยท 48 KB

๋Ÿฌ์ŠคํŠธ

์ถœ์ฒ˜: The Rust Programming Language (์˜๋ฌธ)

๋Ÿฌ์ŠคํŠธ(Rust)๋Š” ์„ฑ๋Šฅ๊ณผ ๋ณด์•ˆ์ด ๋งค์šฐ ๊ฐ•์กฐ๋œ ์ •์  ์ •ํ˜• ํ”„๋กœ๊ทธ๋ž˜๋ฐ ์–ธ์–ด์ด๋ฉฐ, ํŠนํžˆ ์ž๋ฃŒํ˜• ๋ฐ ๋ฉ”๋ชจ๋ฆฌ ๊ด€๋ฆฌ ์ธก์—์„œ ๊ฐ•์ ์„ ์ง€๋‹Œ๋‹ค. ๋ฟ๋งŒ ์•„๋‹ˆ๋ผ, ํ•˜๋“œ์›จ์–ด ์ œ์–ด๊ฐ€ ๊ฐ€๋Šฅํ•˜๋‹ค๋Š” ์ ์—์„œ ํŽŒ์›จ์–ด ๊ฐœ๋ฐœ์—๋„ ํ™œ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค. ์ด๋Ÿฌํ•œ ํŠน์„ฑ๋“ค์— ์˜ํ•ด C++ ์–ธ์–ด์™€ ์œ ์‚ฌํ•œ ์„ฑ๋Šฅ์„ ์ง€๋‹Œ ๋™์‹œ์— ํ›Œ๋ฅญํ•œ ๋ณด์•ˆ์„ฑ์ด ๋ณด์žฅ๋˜์–ด ๋งˆ์ดํฌ๋กœ์†Œํ”„ํŠธ, ๊ตฌ๊ธ€, ์•„๋งˆ์กด ๋“ฑ์˜ ์ฃผ์š” IT ๊ธฐ์—…์˜ ๊ด€์‹ฌ๊ณผ ์ง€์›์„ ๋ฐ›๊ณ  ์žˆ๋‹ค.

์„ค์น˜

๋Ÿฌ์ŠคํŠธ ํ”„๋กœ๊ทธ๋ž˜๋ฐ ์–ธ์–ด๋ฅผ ์‹คํ–‰ํ•˜๋Š” ๋ฐ ํ•„์š”ํ•œ ํˆด์ฒด์ธ์€ ๊ณต์‹ ํ™ˆํŽ˜์ด์ง€์—์„œ rustup_init.exe๋ฅผ ๋‹ค์šด๋กœ๋“œ ๋ฐ›์•„ ์„ค์น˜ํ•œ๋‹ค.

์„ค์น˜ ๊ณผ์ •์—์„œ 2013 ๋ฒ„์ „ ์ด์ƒ์˜ ๋น„์ฃผ์–ผ ์ŠคํŠœ๋””์˜ค์ด ์š”๊ตฌ๋˜๋Š” ๋ฐ, ๋ฏธ๋ฆฌ Desktop development with C++ ๊ทธ๋ฆฌ๊ณ  ์œˆ๋„์šฐ 10 ๋˜๋Š” 11 SDK๋ฅผ ์ค€๋น„ํ•˜๋„๋ก ํ•œ๋‹ค.

<code>rustup_init.exe</code> ์‹œ์ž‘ ํ™”๋ฉด

์—ฌ๊ธฐ์„œ ๋Ÿฌ์ŠคํŠธ ํ”„๋กœ๊ทธ๋ž˜๋ฐ ์–ธ์–ด์˜ ํˆด์ฒด์ธ(toolchain)์ด๋ž€, ์†Œํ”„ํŠธ์›จ์–ด ์ œํ’ˆ ๊ฐœ๋ฐœ์— ํ™œ์šฉ๋˜๋Š” ํ”„๋กœ๊ทธ๋ž˜๋ฐ ๋„๊ตฌ๋“ค์˜ ์ง‘ํ•ฉ์„ ๊ฐ€๋ฆฌํ‚ค๋ฉฐ ๋Œ€ํ‘œ์ ์œผ๋กœ ๋‹ค์Œ ์„ธ ๊ฐœ์˜ ๋ช…๋ น์–ด ํ”„๋กœ๊ทธ๋žจ์ด ์žˆ๋‹ค.

  1. rustc: ๋Ÿฌ์ŠคํŠธ ์ปดํŒŒ์ผ๋Ÿฌ(compiler)
  2. cargo: ๋Ÿฌ์ŠคํŠธ ํŒจํ‚ค์ง€ ๊ด€๋ฆฌ์ž; ํ”„๋กœ์ ํŠธ๋ฅผ ์ปดํŒŒ์ผ ๋ฐ ์‹คํ–‰ํ•œ๋‹ค.
  3. rustup: ๋Ÿฌ์ŠคํŠธ ํˆด์ฒด์ธ ๊ด€๋ฆฌ์ž, ์ฆ‰ ์œ„์˜ rustc ๋ฐ cargo ํ”„๋กœ๊ทธ๋žจ์„ ๋‹ค๋ฅธ ๋ฒ„์ „์œผ๋กœ ์„ค์น˜ ๋ฐ ์„ ํƒํ•œ๋‹ค.

์„ค์น˜๊ฐ€ ์™„๋ฃŒ๋˜๋ฉด %UserProfile% ๋””๋ ‰ํ† ๋ฆฌ์— .rustup ๋ฐ .cargo ํด๋”๊ฐ€ ์ƒ์„ฑ๋œ๋‹ค.

๋Ÿฌ์ŠคํŠธ ๊ด€๋ จ ๋””๋ ‰ํ† ๋ฆฌ ์†Œ๊ฐœโ€  ํŒŒ์ด์ฌ์— ๋น—๋Œ€์–ด ์„ค๋ช…ํ•˜์ž๋ฉด ์ „์ž๋Š” ์‹ค์ œ ํŒŒ์ด์ฌ ์ธํ„ฐํ”„๋ฆฌํ„ฐ๊ฐ€, ํ›„์ž๋Š” Py Launcher๊ฐ€ ์œ„์น˜ํ•œ ํด๋”์— ํ•ด๋‹นํ•œ๋‹ค.
๋””๋ ‰ํ† ๋ฆฌ์„ค๋ช…
.rustuprustc, cargo ๋“ฑ์„ ํฌํ•จํ•œ ๋Ÿฌ์ŠคํŠธ ํˆด์ฒด์ธ์ด ์‹ค์งˆ์ ์œผ๋กœ ์œ„์น˜ํ•˜๋Š” ๋””๋ ‰ํ† ๋ฆฌ์ด๋ฉฐ, toolchains ํ•˜์œ„ํด๋”์— ๋ฒ„์ „๋งˆ๋‹ค ๋‚˜๋‰˜์–ด ์„ค์น˜๋œ๋‹ค.
.cargo์„ค์น˜๋œ ๋Ÿฌ์ŠคํŠธ ํˆด์ฒด์ธ์— ๋งํฌ๋œ ๋ฐ”์ด๋„ˆ๋ฆฌ ํŒŒ์ผ์ด ์œ„์น˜ํ•˜์—ฌ, ๊ฐœ๋ฐœ์ž๋Š” ๋Ÿฌ์ŠคํŠธ์˜ ์ „๋ฐ˜์ ์ธ ํ™˜๊ฒฝ ๊ตฌ์„ฑ์„ ๊ทธ๋Œ€๋กœ ์œ ์ง€ํ•œ ์ฑ„ rustup์—์„œ ์„ ํƒํ•œ ๋ฒ„์ „์œผ๋กœ ๋ณ€๊ฒฝํ•˜์—ฌ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค.

ํ†ตํ•ฉ ๊ฐœ๋ฐœ ํ™˜๊ฒฝ

ํ†ตํ•ฉ ๊ฐœ๋ฐœ ํ™˜๊ฒฝ(integrated development environment; IDE)์€ ์ตœ์†Œํ•œ ํ”„๋กœ๊ทธ๋ž˜๋ฐ ์–ธ์–ด์˜ ์†Œ์Šค ์ฝ”๋“œ ํŽธ์ง‘, ํ”„๋กœ๊ทธ๋žจ ๋นŒ๋“œ, ๊ทธ๋ฆฌ๊ณ  ๋””๋ฒ„๊น… ๊ธฐ๋Šฅ์„ ์ œ๊ณตํ•˜๋Š” ์†Œํ”„ํŠธ์›จ์–ด ๊ฐœ๋ฐœ ํ”„๋กœ๊ทธ๋žจ์ด๋‹ค. ํˆด์ฒด์ธ์€ ๋Ÿฌ์ŠคํŠธ ์ฝ”๋“œ๋ฅผ ์ปดํ“จํ„ฐ๊ฐ€ ์‹คํ–‰ํ•  ์ˆ˜ ์žˆ๋„๋ก ํ•˜๋Š” ๊ฐœ๋ฐœ ๋„๊ตฌ์ด์ง€๋งŒ ๋Ÿฌ์ŠคํŠธ ์ฝ”๋“œ ํŽธ์ง‘๊ธฐ๋Š” ์•„๋‹ˆ๋‹ค. ๋Ÿฌ์ŠคํŠธ ์ฝ”๋“œ๋ฅผ ์ž‘์„ฑํ•˜๊ณ  ํ”„๋กœ๊ทธ๋žจ์œผ๋กœ ์‹คํ–‰ํ•˜์—ฌ ๋ฌธ์ œ๊ฐ€ ๋ฐœ์ƒํ•˜๋ฉด ๊ฒ€ํ† ํ•  ์ˆ˜ ์žˆ๋Š” IDE๊ฐ€ ์ ˆ๋Œ€์ ์œผ๋กœ ํ•„์š”ํ•˜๋‹ค.

  • ๋น„์ฃผ์–ผ ์ŠคํŠœ๋””์˜ค ์ฝ”๋“œ[์ฐธ๊ณ ], ์ผ๋ช… VS Code๋Š” ๋งˆ์ดํฌ๋กœ์†Œํ”„ํŠธ์—์„œ ๊ฐœ๋ฐœํ•œ ๋ฌด๋ฃŒ ์†Œ์Šค ์ฝ”๋“œ ํŽธ์ง‘๊ธฐ์ด๋‹ค. ๋น„๋ก ๊ธฐ์ˆ ์ ์œผ๋กœ IDE๋Š” ์•„๋‹ˆ์ง€๋งŒ, rust-analyzer ํ™•์žฅ๋„๊ตฌ๋ฅผ ์„ค์น˜ํ•˜๋ฉด ์ฝ”๋“œ ์ž๋™์™„์„ฑ, ์ž๋ฃŒํ˜• ์ •์˜, ๊ตฌ๋ฌธ ํ•˜์ด๋ผ์ดํŠธ ๋“ฑ์˜ ๊ธฐ๋Šฅ๋“ค์„ ์ œ๊ณตํ•œ๋‹ค. ์ฝ”๋“œ ๋””๋ฒ„๊น…์„ ํ•˜๋ ค๋ฉด ์•„๋ž˜๋ฅผ ํ•จ๊ป˜ ์„ค์น˜ํ•œ๋‹ค.

ํ”„๋กœ์ ํŠธ

์ฐธ๊ณ : Managing Growing Projects with Packages, Crates, and Modules - The Rust Programming Language

๋Ÿฌ์ŠคํŠธ ํ”„๋กœ๊ทธ๋ž˜๋ฐ ์–ธ์–ด๋Š” cargo๋ผ๋Š” ๊ณต์‹ ํŒจํ‚ค์ง€ ๊ด€๋ฆฌ ๋„๊ตฌ๋ฅผ ํ†ตํ•ด ํ”„๋กœ์ ํŠธ๋ฅผ ๊ด€๋ฆฌํ•œ๋‹ค.

VS Code์—์„œ ๋Ÿฌ์ŠคํŠธ ํ”„๋กœ๊ทธ๋ž˜๋ฐ์˜ ํ”„๋กœ์ ํŠธ

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.rssrc/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์„ ์ค€์ˆ˜ํ•˜๋ฉฐ, ๊ฐ„๋‹จํžˆ ์„ค๋ช…ํ•˜๋ฉด ๋‹ค์Œ๊ณผ ๊ฐ™๋‹ค.

  1. ์•ŒํŒŒ๋ฒณ, ์ˆซ์ž, ๋ฐ‘์ค„ _๋งŒ ํ—ˆ์šฉ (๊ทธ ์™ธ ํŠน์ˆ˜๋ฌธ์ž ๋ฐ ๊ณต๋ฐฑ ์‚ฌ์šฉ ๋ถˆ๊ฐ€)
  2. ์‹๋ณ„์ž์˜ ์ฒซ ๋ฌธ์ž๋Š” ์ˆซ์ž๊ฐ€ ๋  ์ˆ˜ ์—†์Œ
  3. ๋Œ€์†Œ๋ฌธ์ž ๊ตฌ๋ถ„ ํ•„์ˆ˜
  4. ์˜ˆ์•ฝ์–ด ๊ธˆ์ง€

์ฃผ์„

์ฃผ์„(comment)์€ ํ”„๋กœ๊ทธ๋žจ์˜ ์†Œ์Šค ์ฝ”๋“œ๋กœ ์ทจ๊ธ‰ํ•˜์ง€ ์•Š์•„ ์‹คํ–‰๋˜์ง€ ์•Š๋Š” ์˜์—ญ์ด๋‹ค. ํ”ํžˆ ์ฝ”๋“œ์— ๋Œ€ํ•œ ๊ฐ„๋‹จํ•œ ์ •๋ณด๋ฅผ ๊ธฐ์ž…ํ•˜๊ธฐ ์œ„ํ•ด ์‚ฌ์šฉ๋˜๋Š” ๋ฐ, ํฌ๊ฒŒ ๋น„๋ฌธ์„œ ์ฃผ์„ ๊ทธ๋ฆฌ๊ณ  ๋ฌธ์„œ ์ฃผ์„๋กœ ๋‚˜๋‰˜์–ด์ง„๋‹ค.

๋Ÿฌ์ŠคํŠธ ์ฃผ์„ ์ข…๋ฅ˜
๋น„๋ฌธ์„œ ์ฃผ์„(non-doc comments)๋ฌธ์„œ ์ฃผ์„(doc comments)
์ผ๋ฐ˜์ ์ธ C/C++ ์–ธ์–ด ํ˜•์‹์˜ ์ฃผ์„๊ณผ ๋™์ผํ•˜๋‹ค.๋ฌธ์„œ ์ฃผ์„์€ ํ•œ์ค„(///) ๊ทธ๋ฆฌ๊ณ  ๋ธ”๋ก(/** */)์œผ๋กœ ์ž…๋ ฅํ•  ์ˆ˜ ์žˆ์œผ๋ฉฐ, ๋ฐ์ดํ„ฐ์— ๋Œ€ํ•œ ๊ฐ„๋žตํ•œ ์„ค๋ช…์„ ๊ธฐ์ž…ํ•˜๋Š” ๋ฐ ์‚ฌ์šฉ๋œ๋‹ค.
/*
๋ธ”๋ก ์ฃผ์„:
์ฝ”๋“œ ์—ฌ๋Ÿฌ ์ค„์„ ์ฐจ์ง€ํ•˜๋Š” ์ฃผ์„์ด๋‹ค.
*/

// ํ•œ์ค„ ์ฃผ์„: ์ฝ”๋“œ ํ•œ ์ค„์„ ์ฐจ์ง€ํ•˜๋Š” ์ฃผ์„์ด๋‹ค.
/**
๋ธ”๋ก ๋ฌธ์„œ ์ฃผ์„:
์ฝ”๋“œ ์—ฌ๋Ÿฌ ์ค„์„ ์ฐจ์ง€ํ•˜๋Š” ์ฃผ์„์ด๋‹ค.
*/

/// ํ•œ์ค„ ๋ฌธ์„œ ์ฃผ์„: ์ฝ”๋“œ ํ•œ ์ค„์„ ์ฐจ์ง€ํ•˜๋Š” ์ฃผ์„์ด๋‹ค.

์ผ๋ฐ˜ ์ฃผ์„๊ณผ ๋‹ฌ๋ฆฌ, ์‚ฌ์šฉ์ž๊ฐ€ ์ •์˜ํ•œ ๋ฐ์ดํ„ฐ์— ๊ธฐ์ž…๋œ ๋ฌธ์„œ ์ฃผ์„์€ doc์ด๋ž€ ํŠน์ˆ˜ํ•œ ์†์„ฑ์— ์ €์žฅ๋˜์–ด ์ •์˜๋œ ๋ฐ์ดํ„ฐ์— ๋Œ€ํ•œ ์„ค๋ช…์„ ์ •์˜ํ•œ ์†Œ์Šค ์ฝ”๋“œ๋ฅผ ์ฐพ์•„๊ฐ€์ง€ ์•Š๊ณ ์„œ๋„ ๊ณง๋ฐ”๋กœ ๋‚ด์šฉ์„ ์‚ดํŽด๋ณผ ์ˆ˜ ์žˆ๋‹ค.

VS Code์—์„œ์˜ ๋ฌธ์„œ ์ฃผ์„ ํ™œ์šฉ ์˜ˆ์‹œ

ํ˜•์‹ ๋ฐ์ดํ„ฐ

์ฐธ๊ณ : Formatted print - Rust By Example

๋‹ค์Œ์€ ์ง€์ •๋œ ํ˜•์‹์— ๋”ฐ๋ฅธ ๋ฐ์ดํ„ฐ ์ฒ˜๋ฆฌ์— ๊ด€์—ฌํ•˜๋Š” ๋Ÿฌ์ŠคํŠธ์˜ ๋งคํฌ๋กœ๋“ค์„ ์†Œ๊ฐœํ•œ๋‹ค.

  • ์ฝ˜์†” ์ถœ๋ ฅ

    ์ง€์ •๋œ ํ˜•์‹๋Œ€๋กœ ํ…์ŠคํŠธ๋ฅผ ์ฝ˜์†”์— ๋‚˜ํƒ€๋‚˜๋„๋ก ์ถœ๋ ฅํ•˜๋Š” ๋ฐ ์‚ฌ์šฉ๋œ๋‹ค.

    ๋Ÿฌ์ŠคํŠธ์˜ ์ถœ๋ ฅ ๋งคํฌ๋กœ
    ์ถœ๋ ฅ ๋งคํฌ๋กœ์„ค๋ช…
    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)
์ˆซ์ž11๋ฐ”์ดํŠธ ์ •์ˆ˜
i16
(unsigned: u16)
์ˆซ์ž22๋ฐ”์ดํŠธ ์ •์ˆ˜
i32
(unsigned: u32)
์ˆซ์ž44๋ฐ”์ดํŠธ ์ •์ˆ˜
i64
(unsigned: u64)
์ˆซ์ž88๋ฐ”์ดํŠธ ์ •์ˆ˜
i128
(unsigned: u128)
์ˆซ์ž1616๋ฐ”์ดํŠธ ์ •์ˆ˜
isize
(unsigned: usize)
์ˆซ์ž16 (์ตœ์†Œ)ํฌ์ธํ„ฐ ํฌ๊ธฐ์˜ ์ •์ˆ˜; ์˜ˆ๋ฅผ ๋“ค์–ด x86๋Š” 32๋น„ํŠธ, ๊ทธ๋ฆฌ๊ณ  x64๋Š” 64๋น„ํŠธ ์ •์ˆ˜๋กœ ๊ณ„์‚ฐ๋œ๋‹ค.
f32์ˆซ์ž432๋น„ํŠธ ๋‹จ์ •๋ฐ€๋„ ์‹ค์ˆ˜
f64์ˆซ์ž864๋น„ํŠธ ๋ฐฐ์ •๋ฐ€๋„ ์‹ค์ˆ˜
f128์ˆซ์ž16128๋น„ํŠธ 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 ํ•จ์ˆ˜๋Š” ์ž๋ฃŒํ˜•์˜ ๋ฉ”๋ชจ๋ฆฌ ํฌ๊ธฐ๋ฅผ ๋ฐ”์ดํŠธ๋กœ ๋ฐ˜ํ™˜ํ•œ๋‹ค. ์ •ํ™•ํ•œ ์„ค๋ช…์€ "๋ฐฐ์—ด์˜ ๋‹ค์Œ ์š”์†Œ ๊ฐ„ ์˜คํ”„์…‹"์„ ๋ฐ˜ํ™˜ํ•˜๋ฉฐ, ๋ฐ์ดํ„ฐ ์ •๋ ฌ์— ์‚ฝ์ž…๋œ ํŒจ๋”ฉ๋„ ํฌํ•จํ•œ๋‹ค.

  • 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: ํ˜„ ์ฝ”๋“œ ์˜์—ญ๋ฒ”์œ„ ๋‚ด์— ์ƒˆ๋กœ์šด ๋ณ€์ˆ˜๋ฅผ ์†Œ๊ฐœํ•˜๋Š” ๋ฐ ์‚ฌ์šฉ๋œ๋‹ค.
  • const: ์–ด๋””์„œ๋‚˜ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋Š” ๋ถˆ๋ณ€์˜ ์ „์—ญ ์ƒ์ˆ˜์ด๋ฉฐ, ๋ฐ˜๋“œ์‹œ ์ž๋ฃŒํ˜•๊ณผ ํ•จ๊ป˜ ์„ ์–ธ๋˜์–ด์•ผ ํ•œ๋‹ค.
  • static: ๋ฉ”๋ชจ๋ฆฌ ์ฃผ์†Œ๋ฅผ ๋‚˜ํƒ€๋‚ด๊ธฐ ๋•Œ๋ฌธ์—, ์ด๋ฅผ ์ฐธ์กฐํ•˜๋ฉด ๋ฐ์ดํ„ฐ ๋ณ€๊ฒฝ์ด ๊ฐ€๋Šฅํ•˜์—ฌ ์‚ฌ์‹ค์ƒ ์ „์—ญ ๋ณ€์ˆ˜๋กœ ์‚ฌ์šฉ๋œ๋‹ค.
    • mut: ๋‹ค๋ฅธ ๋ฐ์ดํ„ฐ์— ๋ฐ”์ธ๋”ฉํ•  ์ˆ˜ ์žˆ๋Š” ๊ฐ€๋ณ€ ๋ณ€์ˆ˜๋ฅผ ์„ ์–ธํ•˜๋Š” ๋ชฉ์ ์œผ๋กœ๋„ ํ™œ์šฉ๋˜๋ฉฐ, let ๋ฐ static ํ‚ค์›Œ๋“œ์™€ ํ•จ๊ป˜ ์‚ฌ์šฉ๋  ์ˆ˜ ์žˆ๋‹ค.

      ์ปดํŒŒ์ผ๋Ÿฌ๋Š” ๋ฐ์ดํ„ฐ์˜ ๊ฐ’๊ณผ ์‚ฌ์šฉ์ฒ˜๋ฅผ ๊ธฐ๋ฐ˜ํ•˜์—ฌ ๋ณ€์ˆ˜์˜ ์ž๋ฃŒํ˜•์„ ์ถ”๋ก ํ•  ์ˆ˜ ์žˆ์œผ๋‚˜, ๋‹ค์Œ๊ณผ ๊ฐ™์ด ๋ช…์‹œ์ ์œผ๋กœ ๋ณ€์ˆ˜์— ์ž๋ฃŒํ˜•์„ ์ง€์ •ํ•  ์ˆ˜ ์žˆ๋‹ค.

      let variable: u8 = 3;

      ๊ฑฐ์˜ ๋ชจ๋“  ํ”„๋กœ๊ทธ๋ž˜๋ฐ ์–ธ์–ด๋Š” ํ• ๋‹น ๊ธฐํ˜ธ๋ฅผ ๊ธฐ์ค€์œผ๋กœ ์™ผ์ชฝ์—๋Š” ํ”ผํ• ๋‹น์ž(๋ณ€์ˆ˜), ์˜ค๋ฅธ์ชฝ์—๋Š” ํ”ผํ• ๋‹น์ž๋กœ ์ „๋‹ฌํ•˜๋ ค๋Š” ํ‘œํ˜„์‹(๊ฐ’ ํ˜น์€ ๋ฐ์ดํ„ฐ)์ด ์œ„์น˜ํ•œ๋‹ค. ๋ฐ˜๋Œ€๋กœ ๋†“์—ฌ์งˆ ๊ฒฝ์šฐ, ์˜ค๋ฅ˜๊ฐ€ ๋ฐœ์ƒํ•˜๊ฑฐ๋‚˜ ์›์น˜ ์•Š๋Š” ๊ฒฐ๊ณผ๊ฐ€ ๋„์ถœ๋  ์ˆ˜ ์žˆ๋‹ค.

      ์—ฐ์‚ฐ์ž

      ์—ฐ์‚ฐ์ž(operator)๋Š” ํ”ผ์—ฐ์‚ฐ ๋ฐ์ดํ„ฐ๋ฅผ ์กฐ์ž‘ํ•  ์ˆ˜ ์žˆ๋Š” ๊ฐ€์žฅ ๊ฐ„๋‹จํ•œ ํ˜•ํƒœ์˜ ์—ฐ์‚ฐ ์š”์†Œ์ด๋‹ค. ์—ฐ์‚ฐ์ž๋Š” ํ”ผ์—ฐ์‚ฐ์ž์˜ ์ ‘๋‘๋ถ€, ์ ‘๋ฏธ๋ถ€, ํ˜น์€ ๋‘ ๋ฐ์ดํ„ฐ ์‚ฌ์ด์— ์œ„์น˜์‹œ์ผœ ์‚ฌ์šฉํ•œ๋‹ค. ๊ฐ€๋…์„ฑ์„ ์œ„ํ•ด ๋ฐ์ดํ„ฐ์™€ ์—ฐ์‚ฐ์ž ์‚ฌ์ด์— ๊ณต๋ฐฑ์„ ๋„ฃ์–ด๋„ ์—ฐ์‚ฐ์—๋Š” ์•„๋ฌด๋Ÿฐ ์˜ํ–ฅ์„ ์ฃผ์ง€ ์•Š๋Š”๋‹ค. ๋‹ค์Œ์€ ๋Ÿฌ์ŠคํŠธ ์—ฐ์‚ฐ์ž๋“ค์„ ๊ฐ„๋žตํžˆ ์†Œ๊ฐœํ•œ๋‹ค.

      ์‚ฐ์ˆ  ์—ฐ์‚ฐ์ž

      ์‚ฐ์ˆ  ์—ฐ์‚ฐ์ž(arithmetic operators)
      ์—ฐ์‚ฐ์ž์‚ฐ์ˆ ์„ค๋ช…
      +๋ง์…ˆ์ขŒ์ธก๊ณผ ์šฐ์ธก ํ”ผ์—ฐ์‚ฐ์ž์˜ ๊ฐ’์„ ๋”ํ•˜์—ฌ ๋ฐ˜ํ™˜ํ•œ๋‹ค.
      -๋บ„์…ˆ์ขŒ์ธก ํ”ผ์—ฐ์‚ฐ์ž์—์„œ ์šฐ์ธก ํ”ผ์—ฐ์‚ฐ์ž๋ฅผ ๋บ€ ๊ฐ’์„ ๋ฐ˜ํ™˜ํ•œ๋‹ค.
      *๋ง์…ˆ์ขŒ์ธก ํ”ผ์—ฐ์‚ฐ์ž๋ฅผ ์šฐ์ธก ํ”ผ์—ฐ์‚ฐ์ž์˜ ๊ฐ’๋งŒํผ ๊ณฑํ•˜์—ฌ, ์ฆ‰ ๋ฐ˜๋ณต ๋ง์…ˆํ•˜์—ฌ ๋ฐ˜ํ™˜ํ•œ๋‹ค.
      /๋‚˜๋ˆ—์…ˆ์ขŒ์ธก ํ”ผ์—ฐ์‚ฐ์ž์—์„œ ์šฐ์ธก ํ”ผ์—ฐ์‚ฐ์ž๋ฅผ ๋‚˜๋ˆˆ ๋ชซ์„ ๋ฐ˜ํ™˜ํ•œ๋‹ค.
      %๋ชจ๋“ˆ๋Ÿฌ์ขŒ์ธก ํ”ผ์—ฐ์‚ฐ์ž์—์„œ ์šฐ์ธก ํ”ผ์—ฐ์‚ฐ์ž๋ฅผ ๋‚˜๋ˆˆ ๋‚˜๋จธ์ง€๋ฅผ ๋ฐ˜ํ™˜ํ•œ๋‹ค.

      ๋น„ํŠธ ์—ฐ์‚ฐ์ž

      ๋น„ํŠธ ์—ฐ์‚ฐ์ž(bitwise operators)
      ์—ฐ์‚ฐ์ž๋น„ํŠธ์—ฐ์‚ฐ์„ค๋ช…
      &AND๋‘ ํ”ผ์—ฐ์‚ฐ์ž์˜ ๊ฐ ๋น„ํŠธ๋ฅผ ๋น„๊ตํ•˜์—ฌ ๋ชจ๋‘ 1์ด๋ฉด 1์„, ์•„๋‹ˆ๋ฉด 0์„ ๊ณ„์‚ฐํ•˜์—ฌ ๋ฐ˜ํ™˜ํ•œ๋‹ค.
      |OR๋‘ ํ”ผ์—ฐ์‚ฐ์ž์˜ ๊ฐ ๋น„ํŠธ๋ฅผ ๋น„๊ตํ•˜์—ฌ ํ•˜๋‚˜๋ผ๋„ 1์ด ์žˆ์œผ๋ฉด 1์„, ์•„๋‹ˆ๋ฉด 0์„ ๊ณ„์‚ฐํ•˜์—ฌ ๋ฐ˜ํ™˜ํ•œ๋‹ค.
      ^XOR๋‘ ํ”ผ์—ฐ์‚ฐ์ž์˜ ๊ฐ ๋น„ํŠธ๋ฅผ ๋น„๊ตํ•˜์—ฌ ๊ฐ’์ด ๊ฐ™์œผ๋ฉด 0์„, ๋‹ค๋ฅด๋ฉด 1์„ ๊ณ„์‚ฐํ•˜์—ฌ ๋ฐ˜ํ™˜ํ•œ๋‹ค.
      !NOTํ”ผ์—ฐ์‚ฐ์ž์˜ ๊ฐ ๋น„ํŠธ๋งˆ๋‹ค ๋ฐ˜์ „์‹œํ‚จ ๊ฐ’์„ ๋ฐ˜ํ™˜ํ•œ๋‹ค.
      <<์ขŒํ–ฅ ์‹œํ”„ํŠธํ”ผ์—ฐ์‚ฐ์ž(ๅทฆ)์˜ ๋น„ํŠธ๋ฅผ ์ „๋ฐ˜์ ์œผ๋กœ ์ผ์ • ๊ฐ’(ๅณ)๋งŒํผ ์™ผ์ชฝ์œผ๋กœ ์ด๋™์‹œํ‚จ๋‹ค.
      >>์šฐํ–ฅ ์‹œํ”„ํŠธํ”ผ์—ฐ์‚ฐ์ž(ๅทฆ)์˜ ๋น„ํŠธ๋ฅผ ์ „๋ฐ˜์ ์œผ๋กœ ์ผ์ • ๊ฐ’(ๅณ)๋งŒํผ ์˜ค๋ฅธ์ชฝ์œผ๋กœ ์ด๋™์‹œํ‚จ๋‹ค.

      ํ• ๋‹น ์—ฐ์‚ฐ์ž

      ๋‹จ์ˆœ ํ• ๋‹น ์—ฐ์‚ฐ์ž๋ฅผ ์‚ฐ์ˆ  ๋ฐ ๋น„ํŠธ ์—ฐ์‚ฐ์ž์™€ ์กฐํ•ฉํ•˜์—ฌ ์ฝ”๋“œ๋ฅผ ๋”์šฑ ๊ฐ„๊ฒฐํ•˜๊ฒŒ ์ž‘์„ฑํ•  ์ˆ˜ ์žˆ์œผ๋ฉฐ, ์•„๋ž˜๋Š” ๋‹ค์–‘ํ•œ ํ• ๋‹น ์—ฐ์‚ฐ์ž ์ค‘ ์ผ๋ถ€๋งŒ ๋ณด์—ฌ์ค€๋‹ค.

      ํ• ๋‹น ์—ฐ์‚ฐ์ž(assignment operators)
      ์—ฐ์‚ฐ์žํ• ๋‹น์„ค๋ช…
      =๋‹จ์ˆœ ํ• ๋‹นํ”ผ์—ฐ์‚ฐ์ž(ๅณ)๊ฐ€ ๋ณ€์ˆ˜์™€ ๊ฐ™์€ ํ”ผํ• ๋‹น์ž(ๅทฆ)๋กœ ํ• ๋‹น๋œ ๊ฐ’์„ ๋ฐ˜ํ™˜ํ•œ๋‹ค.
      +=๋ง์…ˆ ๋Œ€์ž…
      x += y;  // ๋™์ผ: x = x + y;
      *=๊ณฑ์…ˆ ๋Œ€์ž…
      x *= y;  // ๋™์ผ: x = x * y;
      &=AND ๋Œ€์ž…
      x &= y;  // ๋™์ผ: x = x & y;
      <<=์ขŒํ–ฅ ์‹œํ”„ํŠธ ๋Œ€์ž…
      x <<= y;  // ๋™์ผ: x = x << y;

      ๋น„๊ต ์—ฐ์‚ฐ์ž

      ์•„๋ž˜ ๋น„๊ต ์—ฐ์‚ฐ์ž์˜ ์„ค๋ช…์€ ์ฐธ์„ ๋ฐ˜ํ™˜ํ•  ์กฐ๊ฑด์„ ์†Œ๊ฐœํ•˜๋ฉฐ, ๊ทธ ์™ธ์—๋Š” ๋ชจ๋‘ false๋ฅผ ๋ฐ˜ํ™˜ํ•œ๋‹ค.

      ๋น„๊ต ์—ฐ์‚ฐ์ž(comparison operators)
      ์—ฐ์‚ฐ์ž๊ด€๊ณ„์„ค๋ช…
      >์ดˆ๊ณผ์ขŒ์ธก ํ”ผ์—ฐ์‚ฐ์ž๊ฐ€ ์šฐ์ธก ํ”ผ์—ฐ์‚ฐ์ž๋ณด๋‹ค ํฌ๋ฉด true๋ฅผ ๋ฐ˜ํ™˜ํ•œ๋‹ค.
      <๋ฏธ๋งŒ์ขŒ์ธก ํ”ผ์—ฐ์‚ฐ์ž๊ฐ€ ์šฐ์ธก ํ”ผ์—ฐ์‚ฐ์ž๋ณด๋‹ค ์ž‘์œผ๋ฉด true๋ฅผ ๋ฐ˜ํ™˜ํ•œ๋‹ค.
      >=์ด์ƒ์ขŒ์ธก ํ”ผ์—ฐ์‚ฐ์ž๊ฐ€ ์šฐ์ธก ํ”ผ์—ฐ์‚ฐ์ž๋ณด๋‹ค ํฌ๊ฑฐ๋‚˜ ๊ฐ™์œผ๋ฉด true๋ฅผ ๋ฐ˜ํ™˜ํ•œ๋‹ค.
      <=์ดํ•˜์ขŒ์ธก ํ”ผ์—ฐ์‚ฐ์ž๊ฐ€ ์šฐ์ธก ํ”ผ์—ฐ์‚ฐ์ž๋ณด๋‹ค ์ž‘๊ฑฐ๋‚˜ ๊ฐ™์œผ๋ฉด true๋ฅผ ๋ฐ˜ํ™˜ํ•œ๋‹ค.
      ==๋™์ผ๋‘ ํ”ผ์—ฐ์‚ฐ์ž์˜ ๊ฐ’์ด ๊ฐ™์œผ๋ฉด true๋ฅผ ๋ฐ˜ํ™˜ํ•œ๋‹ค.
      !=์ƒ์ด๋‘ ํ”ผ์—ฐ์‚ฐ์ž์˜ ๊ฐ’์ด ๊ฐ™์ง€ ์•Š์œผ๋ฉด true๋ฅผ ๋ฐ˜ํ™˜ํ•œ๋‹ค.

      ๋…ผ๋ฆฌ ์—ฐ์‚ฐ์ž

      (๋…ผ๋ฆฌ ๋ถ€์ •์„ ์ œ์™ธํ•œ) ์•„๋ž˜ ๋…ผ๋ฆฌ ์—ฐ์‚ฐ์ž์˜ ์„ค๋ช…์€ ์ฐธ์„ ๋ฐ˜ํ™˜ํ•  ์กฐ๊ฑด์„ ์†Œ๊ฐœํ•˜๋ฉฐ, ๊ทธ ์™ธ์—๋Š” ๋ชจ๋‘ false๋ฅผ ๋ฐ˜ํ™˜ํ•œ๋‹ค.

      ๋…ผ๋ฆฌ ์—ฐ์‚ฐ์ž(logical operators)
      ์—ฐ์‚ฐ์ž๋…ผ๋ฆฌ์„ค๋ช…
      &&๋…ผ๋ฆฌ๊ณฑ์ขŒ์ธก ๊ทธ๋ฆฌ๊ณ  ์šฐ์ธก ๋ช…์ œ(ํ”ผ์—ฐ์‚ฐ์ž)๊ฐ€ ๋ชจ๋‘ ์ฐธ์ด๋ฉด 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 ์กฐ๊ฑด๋ฌธ์€ ์กฐ๊ฑด ํ˜น์€ ๋…ผ๋ฆฌ๊ฐ€ ์ฐธ์ผ ๊ฒฝ์šฐ ์ฝ”๋“œ๋ฅผ ์‹คํ–‰ํ•˜๋ฉฐ, ๊ฑฐ์ง“์ผ ๊ฒฝ์šฐ์—๋Š” ์ฝ”๋“œ๋ฅผ ์‹คํ–‰ํ•˜์ง€ ์•Š๋Š”๋‹ค.

      if condition {
          statements;
      }
      • else ์กฐ๊ฑด๋ฌธ

        ๋‹จ๋…์œผ๋กœ ์‚ฌ์šฉ๋  ์ˆ˜ ์—†์œผ๋ฉฐ ๋ฐ˜๋“œ์‹œ if ์กฐ๊ฑด๋ฌธ ์ดํ›„์— ์‚ฌ์šฉ๋˜์–ด์•ผ ํ•œ๋‹ค. ์กฐ๊ฑด๋ถ€๊ฐ€ ๊ฑฐ์ง“์œผ๋กœ ํŒ์ •๋˜๋ฉด ์‹คํ–‰ํ•  ์ฝ”๋“œ๋ฅผ ํฌํ•จํ•œ๋‹ค.

        if condition {
            statements;
        }
        else {
            statements; 
        }
      • else if ์กฐ๊ฑด๋ฌธ

        else์™€ if ์กฐ๊ฑด๋ฌธ์˜ ์กฐํ•ฉ์œผ๋กœ ์ด์ „ ์กฐ๊ฑด์ด ๊ฑฐ์ง“์ผ ๋•Œ ์ƒˆ๋กœ์šด ์กฐ๊ฑด์„ ์ œ์‹œํ•œ๋‹ค.

        if condition {
            statements;
        }
        else if condition {
            statements;
        }
        else {
            statements;
        }

      match ์กฐ๊ฑด๋ฌธ

      match ์กฐ๊ฑด๋ฌธ์€ ์ „๋‹ฌ๋ฐ›์€ ์ธ์ž๋ฅผ ์‰ผํ‘œ๋กœ ๊ตฌ๋ถ„๋œ ๊ฐ matcharm์„ ์œ„์—์„œ๋ถ€ํ„ฐ ์ˆœ์„œ๋Œ€๋กœ ํŒจํ„ด ์ผ์น˜ ์—ฌ๋ถ€๋ฅผ ๋น„๊ตํ•˜์—ฌ, ์ฐธ์ผ ๊ฒฝ์šฐ ํ•ด๋‹น ์ง€์ ๋ถ€ํ„ฐ ์ฝ”๋“œ๋ฅผ ์‹คํ–‰ํ•˜๊ณ  ๊ฑฐ์ง“์ผ ๊ฒฝ์šฐ์—๋Š” ์ˆœ์„œ๋กœ ๋„˜์–ด๊ฐ„๋‹ค. ์„ ํƒ์‚ฌํ•ญ์œผ๋กœ ๋งˆ์ง€๋ง‰ _ matcharm ๊ฐ€์ง€๋Š” ์–ด๋– ํ•œ ๊ฒฝ์šฐ์—๋„ ๋ถ€ํ•ฉํ•˜์ง€ ์•Š์œผ๋ฉด ์‹คํ–‰๋˜๋Š” ํŒจํ„ด์ด๋‹ค.

      match argument {
          matcharm => expression,
          matcharm => expression,
          _ => expression
      }

      match ์กฐ๊ฑด๋ฌธ์€ ํƒ€ ํ”„๋กœ๊ทธ๋ž˜๋ฐ ์–ธ์–ด์—์„œ ์†Œ๊ฐœ๋˜๋Š” switch ์กฐ๊ฑด๋ฌธ๊ณผ ์œ ์‚ฌํ•˜์ง€๋งŒ, ๋” ๋ฒ”์šฉ์ ์ธ "ํŒจํ„ด ์ผ์น˜" ์—ฌ๋ถ€๋ฅผ ํ™•์ธํ•˜๋Š” ์ ์—์„œ ์ฐจ์ด๊ฐ€ ์กด์žฌํ•œ๋‹ค. ํŒŒ์ด์ฌ 3.10๋ถ€ํ„ฐ ์†Œ๊ฐœ๋œ match ์กฐ๊ฑด๋ฌธ ๋˜ํ•œ ์ด์™€ ๋™์ผํ•œ ๋ฐฉ์‹์œผ๋กœ ๋™์ž‘ํ•œ๋‹ค. ์ž์„ธํ•œ ๋‚ด์šฉ์€ ๋Ÿฌ์ŠคํŠธ์˜ ํŒจํ„ด ๊ตฌ๋ฌธ์„ ์ฐธ๊ณ ํ•˜๋„๋ก ํ•œ๋‹ค.

      ๋ฐ˜๋ณต๋ฌธ

      ๋ฐ˜๋ณต๋ฌธ(loop statement)์€ ์ฃผ์–ด์ง„ ์กฐ๊ฑด์˜ ๋…ผ๋ฆฌ์— ๋”ฐ๋ผ์„œ ์ฝ”๋“œ๋ฅผ ์–ผ๋งˆ๋‚˜ ๋ฐ˜๋ณต์ ์œผ๋กœ ์‹คํ–‰ํ•  ์ง€ ๊ฒฐ์ •ํ•˜๋Š” ์ œ์–ด๋ฌธ์ด๋‹ค:

      loop ๋ฐ˜๋ณต๋ฌธ

      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 ๋ฐ˜๋ณต๋ฌธ์€ ์กฐ๊ฑด ํ˜น์€ ๋…ผ๋ฆฌ๊ฐ€ ์ฐธ์ผ ๋™์•ˆ ์ฝ”๋“œ๋ฅผ ๋ฐ˜๋ณต์ ์œผ๋กœ ์‹คํ–‰ํ•˜๋ฉฐ, ๊ฑฐ์ง“์ผ ๊ฒฝ์šฐ์—๋Š” ๋ฐ˜๋ณต๋ฌธ์„ ์ข…๋ฃŒํ•œ๋‹ค.

      while condition {
          statements;
      }

      for ๋ฐ˜๋ณต๋ฌธ

      for ๋ฐ˜๋ณต๋ฌธ์€ ์œ ํšจํ•œ ๋ฒ”์œ„ ๋‚ด์—์„œ ์ฝ”๋“œ๋ฅผ ๋ฐ˜๋ณต์ ์œผ๋กœ ์‹คํ–‰ํ•˜๊ณ , ๋ฒ”์œ„์˜ ๋ชจ๋“  ๊ฐ’์ด ๋ฐ˜๋ณต๋˜๋ฉด ์ข…๋ฃŒํ•œ๋‹ค.

      for index in iterator {
          statements;
      }

      ์—ฌ๊ธฐ์„œ ๋ณ€์ˆ˜ index๋Š” iterable์—์„œ ๊ฐ’์„ ์–ป๊ณ , ๋‚ด๋ถ€์˜ ์‹คํ–‰๋ฌธ์€ ๋” ์ด์ƒ ๋ถˆ๋Ÿฌ์˜ฌ ๊ฐ’์ด ์—†์„ ๋•Œ๊นŒ์ง€ ํ•˜๋‚˜์”ฉ ๋ฐ˜๋ณตํ•œ๋‹ค. ํ”ํžˆ ๋ฐ˜๋ณต๋ฌธ์— ์‚ฌ์šฉ๋˜๋Š” iterable ๋ฐ์ดํ„ฐ๋กœ ๋ฐฐ์—ด, ๋ฌธ์ž์—ด ๋“ฑ์ด ์žˆ๋‹ค.

      ์ด๋™๋ฌธ

      ์ด๋™๋ฌธ(jump statement)์€ ์•„๋ฌด๋Ÿฐ ์กฐ๊ฑด์ด ํ•„์š”์—†์ด ์ฝ”๋“œ ์‹คํ–‰ ์ง€์ ์„ ์ด๋™์‹œํ‚ค๋Š” ์ œ์–ด๋ฌธ์ด๋‹ค:

      break ํƒˆ์ถœ๋ฌธ

      break ํƒˆ์ถœ๋ฌธ์€ (1) ๋ฐ˜๋ณต๋ฌธ์„ ์กฐ๊ธฐ ์ข…๋ฃŒ์‹œํ‚ค๊ฑฐ๋‚˜, (2) switch ์กฐ๊ฑด๋ฌธ์—์„œ ๊ฒฝ์šฐ์— ๋”ฐ๋ผ ์‹คํ–‰๋˜์–ด์•ผ ํ•  ์ฝ”๋“œ๋ฅผ ๊ตฌ๋ถ„์ง“๊ธฐ ์œ„ํ•ด ์‚ฌ์šฉ๋œ๋‹ค.

      continue ์—ฐ์†๋ฌธ

      continue ์—ฐ์†๋ฌธ์€ ๋ฐ˜๋ณต๋ฌธ์„ ์ข…๋ฃŒํ•˜์ง€ ์•Š์€ ์ฑ„ ๋‚˜๋จธ์ง€ ์‹คํ–‰ ์ฝ”๋“œ๋ฅผ ์ „๋ถ€ ๋ฌด์‹œํ•˜๊ณ  ๋ฐ˜๋ณต๋ฌธ์˜ ์กฐ๊ฑด๋ถ€๋กœ ๋˜๋Œ์•„๊ฐ„๋‹ค.

      return ๋ฐ˜ํ™˜๋ฌธ

      return ๋ฐ˜ํ™˜๋ฌธ์€ ํ•จ์ˆ˜๋ฅผ ์ข…๋ฃŒํ•˜๋ฉด์„œ ์ง€์ •๋œ ์ž๋ฃŒํ˜•์œผ๋กœ ๋ฐ์ดํ„ฐ๋ฅผ ๋ฐ˜ํ™˜ํ•œ๋‹ค. ํ•˜๋‹จ์— ์ฝ”๋“œ๊ฐ€ ๋‚จ์•„ ์žˆ์Œ์—๋„ ๋ถˆ๊ตฌํ•˜๊ณ  ๋ฐ˜ํ™˜๋ฌธ์ด ์‹คํ–‰๋˜๋ฉด ํ•จ์ˆ˜๋Š” ์ฆ‰์‹œ ์ข…๋ฃŒ๋œ๋‹ค.

      // return ๋ฐ˜ํ™˜๋ฌธ์ด ์žˆ๋Š” ์‚ฌ์šฉ์ž ์ •์˜ ํ•จ์ˆ˜
      fn function() -> i32 {
          println!("Hello World!");
          return 1 + 2;
      }
      
      println!("{}", function());    
      Hello World!
      3
      

      ์†Œ์œ ๊ถŒ

      ์ฐธ๊ณ : What is Ownership? - The Rust Programming Language

      ๋Ÿฌ์ŠคํŠธ ์–ธ์–ด๊ฐ€ ํƒ€ ํ”„๋กœ๊ทธ๋ž˜๋ฐ ์–ธ์–ด์— ๋น„ํ•ด ์–ด๋ ค์šด ์ด์œ  ์ค‘ ํ•˜๋‚˜๋Š” ๋ฐ”๋กœ ๋ฉ”๋ชจ๋ฆฌ ๊ด€๋ฆฌ๋ฅผ ์†Œ์œ ๊ถŒ(ownership)์ด๋ž€ ์ƒˆ๋กœ์šด ๊ฐœ๋…์„ ๋„์ž…ํ•˜์˜€๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค. ๋ณธ ์žฅ์€ ์†Œ์œ ๊ถŒ์˜ ๊ฐœ๋…๊ณผ ๋™์ž‘์„ ์†Œ๊ฐœํ•œ๋‹ค.

      ๋ชจ๋“ˆ

      ์ฐธ๊ณ : Defining Modules to Control Scope and Privacy - The Rust Programming Language

      ๋ชจ๋“ˆ(module)์€ ํ•จ์ˆ˜, ๊ตฌ์กฐ์ฒด, ์‹ฌ์ง€์–ด ํƒ€ ๋ชจ๋“ˆ์„ ํฌํ•จํ•œ ์ฝ”๋“œ ํ•ญ๋ชฉ๋“ค์„ ๋…ผ๋ฆฌ ๋‹จ์œ„๋กœ ๋‚˜๋ˆˆ ์ง‘ํ•ฉ์ฒด์ด๋‹ค.