Linux, macOS: ์คํฌ๋ฆฝํธ์ rust up ๋๊ตฌ ์ค์น $ curl sh.rustup.rs -sSf | sh ์ฑ๊ณต์ ์ธ ์ค์น ์ ๋ค์๊ณผ ๊ฐ์ ๋ฌธ๊ตฌ๊ฐ ์ถ๋ ฅ๋ฉ๋๋ค. Rust is installed now. ์ฌ๋ฐ๋ฅด๊ฒ ์ค์น๋์๋์ง ํ์ธ $ rustc --version
chapter1์์ ์์ฑํ๋ ๋๋ ํ ๋ฆฌ์ธ projects๋ก ์ด๋ํ๊ณ ์๋ ์์ ๋ฅผ ์ ๋ ฅํด ์๋ก์ด ํ๋ก์ ํธ๋ฅผ ์์ฑํฉ๋๋ค.chapter1์์์ฒ๋ผ "Hello,world!" ํ๋ก๊ทธ๋จ์ด ์์ฑ๋ฉ๋๋ค.cargo runย ์ ๋ ฅ ์ Hello, world! ๊ฐ ์ถ๋ ฅ๋๋ ๊ฒ์ ๋ณผ ์ ์์ต๋
ํ๋ก์ ํธ ๋๋ ํ ๋ฆฌ ๋ง๋ค๊ธฐ ํ๋ก๊ทธ๋จ ์์ฑ์์์ ๋ง๋ ๋๋ ํ ๋ฆฌ ์์ main.rs ๋ผ๋ ์๋ก์ด ์์ค ํ์ผ ์์ฑ ํ ์๋์ ์ฝ๋ ์ ๋ ฅ์ปดํ์ผ ๋ฐ ์คํ rustc๋ฅผ ์ฌ์ฉํ์ฌ ์ปดํ์ผ์ ํ๊ณ ๋ง๋ค์ด์ง ์คํํ์ผ์ ์คํ์ํต๋๋ค. windows์ปดํ์ผ ์ ์๋์ ๊ฐ์ด ์คํํ์ผ์ด ๋ง๋ค์ด์ง
Rust์ ๊ธฐ๋ณธ ๋ณ์๋ย ๋ถ๋ณ์ฑ ์ ๋๋ค. ์ด๋ Rust๊ฐ ์ ๊ณตํ๋ ์์ ์ฑ๊ณผ ์์ฌ์ด ๋์์ฑ์ด๋ผ๋ ์ฅ์ ์ ์ทจํ ์ ์๋๋ก ๊ฐ์ ํ๋ ์์ ์ค ํ๋์ ๋๋ค. ๋ณ์๊ฐ ๋ถ๋ณ์ฑ์ธ ๊ฒฝ์ฐ, ๊ฐ์ด bound๋๋ฉด ํด๋น ๊ฐ์ ๋ณ๊ฒฝํ ์ ์์ต๋๋ค. ๋ถ๋ณ์ฑ ๋ณ์์ ์ฌํ ๋น์ ํ๋ ค๊ณ ํ ๋ ์ปดํ์ผ๋ฌ
Rust์ ํฌํจ๋์ด ์๋ ํ์ ์ ํฌ๊ฒ ์ค์นผ๋ผ์ ์ปดํ์ด๋๋ก ๋๋ ์ ์์ต๋๋ค. ์ฃผ์ํ ์ ์ Rust๋ ํ์ ์ด ๊ณ ์ ๋ ์ธ์ด๋ผ๋ ์ ์ ๋๋ค. ๋ชจ๋ ๋ณ์์ ํ์ ์ด ์ปดํ์ผ ์์ ๋ฐ๋์ ์ ํด์ ธ ์์ด์ผ ํฉ๋๋ค. ๋ณดํต ์ปดํ์ผ๋ฌ๋ ์ฐ๋ฆฌ๊ฐ ๊ฐ์ ์ฌ์ฉํ๋ ์ง์ ๋ฐ๋ผ ํ์ ์ ์ถ์ธกํ ์ ์์ต๋
Rust์ ๋ณ์๋ ํจ์ ์ด๋ฆ์ ํ์ ๊ท์น์ ๋ชจ๋ ๋ฌธ์๋ ์๋ฌธ์๋ฅผ ์ฌ์ฉํ๋ฉฐ ๋ฐ์ค ํ์๋ก ๋จ์ด๋ฅผ ๊ตฌ๋ถํ๋ ๋ฑ ํํ๋ฅผ ์ฌ์ฉํฉ๋๋ค.ํจ์๊ฐ ๋งค๊ฐ๋ณ์๋ฅผ ์ทจํ ๋ ์์๋ฅผ ์ ๋ฌ์ธ์๋ก ์ ๊ณตํ ์ ์์ต๋๋ค. ์ ๋ฌ๋๋ ์์๋ฅผ ์ ๋ฌ์ธ์๋ผ๊ณ ๋ถ๋ฅด์ง๋ง, "์ ๋ฌ์ธ์"์ "๋งค๊ฐ๋ณ์"๋ฅผ ํผ์ฉํด์ ์ฌ
ifย ํค์๋๋ก ์์ํ์ฌ ๋ค์ด์ด ์กฐ๊ฑด์ด ์ต๋๋ค. ์ ํ์ ์ผ๋กย else if,ย elseย ์์ ํฌํจ์ํฌ ์ ์์ต๋๋ค. ์์ ์ฝ๋๋ ๋ถ๊ธฐํ ์ ์๋ ๋ค ๊ฐ์ ๊ฒฝ๋ก๋ฅผ ๊ฐ์ต๋๋ค. ๋๋ฌด ๋ง์ย else if์์ ์ฌ์ฉ์ ์ฝ๋ ์ดํด๋ฅผ ์ด๋ ต๊ฒ ํฉ๋๋ค. ์ด๋ฅผ ์ํด ํ์ 6์ฅ์ ๋ค๋ฃฐย match
์์ ๊ถ(Ownership)์ Rust์ ๊ฐ์ฅ ์ ๋ํฌํ ํน์ฑ์ด๋ฉฐ, Rust๊ฐ Garbage collector ์์ด ์์ ์ฑ ๋ณด์ฅ์ ๊ฐ๋ฅํ๊ฒ ํด์ค๋๋ค. Rust์์ ์์ ๊ถ์ด ์ด๋ป๊ฒ ๋์ํ๋์ง ์ดํดํ๋ ๊ฒ์ ๋งค์ฐ ์ค์ํฉ๋๋ค. ์์ ๊ถ ๋ฟ๋ง ์๋๋ผ ๊ด๋ จ๋ ํน์ฑ๋ค(๋น๋ฆผ, ์ฌ๋ผ์ด์ค,
ํจ์์๊ฒ ๊ฐ์ ์ฌ์ฉํ ์ ์๋๋ก ํ๋ ์์ ๊ถ์ ๊ฐ์ง ์๋๋ก ํ๊ณ ์ถ๋ค๋ฉดย ์ฐธ์กฐ์(reference)ย ๋ฅผ ์ฌ์ฉํ ์ ์์ต๋๋ค.์๋์ ์ฝ๋๋ ์์ ๊ถ์ ๋๊ธฐ๋ ๋์ ๊ฐ์ฒด์ ๋ํ ์ฐธ์กฐ์๋ฅผ ์ธ์๋ก ์ฌ์ฉํ๋ย calculate_lengthย ํจ์๋ฅผ ์ ์ํฉ๋๋ค.calculate_lengt
์์ ๊ถ์ ๊ฐ์ง ์๋ ๋ ๋ค๋ฅธ ๋ฐ์ดํฐ ํ์ ์ย ์ฌ๋ผ์ด์คย ์ ๋๋ค. ์ฌ๋ผ์ด์ค๋ ์ปฌ๋ ์ (collection) ์ ์ฒด๊ฐ ์๋ ์ปฌ๋ ์ ์ ์ฐ์๋ ์ผ๋ จ์ ์์๋ค์ ์ฐธ์กฐํ ์ ์๊ฒ ํฉ๋๋ค.String์ ์ ๋ ฅ ๋ฐ์ String์์ ์ฐพ์ ์ฒซ ๋ฒ์งธ ๋จ์ด๋ฅผ ๋ฐํํ๋ ํจ์๋ฅผ ์์ฑํด๋ด ์๋ค.์ ๋ ฅ๋ S
๊ตฌ์กฐ์ฒด๋ ํํ๊ณผ ์ ์ฌํ๊ฒ ๊ตฌ์ฑ์์๋ค์ด ๊ฐ์ ๋ค๋ฅธ ํ์ ์ ์ง๋ ์ ์์ต๋๋ค. ํ์ง๋ง ํํ๊ณผ๋ ๋ฌ๋ฆฌ ๊ฐ ๊ตฌ์ฑ์์๋ค์ ๋ช ๋ช ํ ์ ์์ด ๊ฐ์ด ์๋ฏธํ๋ ๋ฐ๋ฅผ ๋ช ํํ๊ฒ ์ธ์งํ ์ ์์ต๋๋ค. ๊ตฌ์กฐ์ฒด ๋ด์ ํน์ ์์ ๋ฐ์ดํฐ ๋ช ์ธ๋ฅผ ๊ธฐ์ ํ๊ฑฐ๋ ์ ๊ทผ ์ ์์์ ์์กดํ ํ์๊ฐ ์์ด ํํ๋ณด
์ฌ๊ฐํ์ ๋์ด๋ฅผ ๊ณ์ฐํ๋ ํ๋ก๊ทธ๋จ์ ์์ฑํด๋ด ์๋ค.Cargo๋ก ํฝ์ ๋จ์๋ก ๋ช ์๋ ์ฌ๊ฐํ์ ๊ธธ์ด์ ๋์ด๋ฅผ ์ ๋ ฅ๋ฐ์ ์ฌ๊ฐํ์ ๋์ด๋ฅผ ๊ณ์ฐํ๋ย rectanglesย ๋ผ๋ ์ด๋ฆ์ ์๋ก์ด ๋ฐ์ด๋๋ฆฌ ํ๋ก์ ํธ๋ฅผ ๋ง๋ญ๋๋ค.cargo new rectangles --binfilename:
Rust ํ๋ก๊ทธ๋จ ์์ฑ ํ ํ ์คํธ ๊ณผ์ ์์ย cargo check์ย cargo test์์ ์๋ฌด๋ฐ ์ค๋ฅ๊ฐ ๋ฐ๊ฒฌ๋์ง ์์์ผ๋cargo clippy --all-targetsย ์ํ ์ค์ "os error 5" warning ๋ฉ์ธ์ง๊ฐ ๋ด์ต๋๋ค.์์ ๊ฐ์ด ์ฝ๋์ ๋ณ๊ฐ๋ก ๋ฐ์ํ๋
๋ฉ์๋(method)๋ ํจ์์ ์ ์ฌํฉ๋๋ค. ํ์ง๋ง ๋ฉ์๋๋ ํจ์์ ๋ฌ๋ฆฌ ๊ตฌ์กฐ์ฒด์ ๋ด์ฉ ์(ํน์ ์ด๊ฑฐํ์ด๋ ํธ๋ ์ ๊ฐ์ฒด ์)์ ์ ์๋ฉ๋๋ค. ์ฒซ ๋ฒ์งธ ํ๋ผ๋ฏธํฐ๊ฐ ์ธ์ ๋ self ์ธ๋ฐ ์ด๋ ๋ฉ์๋๊ฐ ํธ์ถ๋๊ณ ์๋ ๊ตฌ์กฐ์ฒด์ ์ธ์คํด์ค๋ฅผ ๋ํ๋ ๋๋ค.chapter5-2์ ์ฝ๋๋ฅผ ์
์๋ย IpAddrKindย ์ด๋ผ๋ ์ด๊ฑฐํ์ ์ ์ํ๋ฉด์ ํฌํจํ ์ ์๋ IP ์ฃผ์์ธย V4ย ๊ณผย V6ย ๋ฅผ ๋์ดํ๋ ์ฝ๋์ ๋๋ค. ์ด๋ค์ ์ด๊ฑฐํ์ย variantsย ๋ผ๊ณ ํ๋ฉฐ ์ด๊ฑฐํ์ ๊ฐ์ variants ์ค ํ๋๋ง ๋ ์ ์์ต๋๋ค.์๋์ฒ๋ผย IpAddrKindย ์ ๋ ๊ฐ์ vari
๋ฌ์คํธ์ย match๋ ์ผ๋ จ์ ํจํด์ ๋ํด ์ด๋ค ๊ฐ์ ๋น๊ตํ ๋ค ์ด๋ค ํจํด์ ๋งค์น๋์๋์ง๋ฅผ ๋ฐํ์ผ๋ก ์ฝ๋๋ฅผ ์ํํ๋๋ก ํด์ค๋๋ค. ํจํด์ ๋ฆฌํฐ๋ด๊ฐ, ๋ณ์๋ช , ์์ผ๋์นด๋ ๋ฑ์ผ๋ก ๊ตฌ์ฑ๋ ์ ์์ต๋๋ค.ย match์ ํ์ ํจํด์ ํํ์ฑ์ผ๋ก๋ถํฐ ์ค๋ฉฐ ์ปดํ์ผ๋ฌ๋ ๋ชจ๋ ๊ฐ๋ฅํ ๊ฒฝ์ฐ๊ฐ
Rust๋ ์กฐ์งํ๋ ๋ฐฉ์์ผ๋ก ์ฝ๋์ ์ฌ์ฌ์ฉ์ ๋์์ฃผ๋ ๋ชจ๋(module)์ ๊ฐ์ถ๊ณ ์์ต๋๋ค. ์ฝ๋ ๋ช ์ค์ ํจ์๋ก ์ถ์ถํ๋ ๊ฒ๊ณผ ๊ฐ์ ๋ฐฉ์์ผ๋ก, ํจ์(ํน์ ๊ตฌ์กฐ์ฒด๋ ์ด๊ฑฐํ ๊ฐ์ ๋ค๋ฅธ ์ฝ๋๋ค)๋ฅผ ๋ค๋ฅธ ๋ชจ๋๋ก ๋ฝ์๋ผ ์ ์์ผ๋ฉฐ ์ด๋ค์ public ํน์ private์ผ๋ก ์
์์ ๋ง๋ค์๋ ํ๋ก์ ํธ์์ ๋น๋๊ฐ ๊ฐ๋ฅํ๊ธด ํ์ง๋ง ๊ฒฝ๊ณ ๋ฉ์ธ์ง๊ฐ ๋์์ง๋ ๊ฒ์ ๋ณผ ์ ์์์ต๋๋ค.Rust๋ connect ํจ์ ๋ฑ์ด ์ฌ์ฉ๋์ง ์์๊ธฐ ๋๋ฌธ์ ๊ฒฝ๊ณ ๋ฅผ ๋์์ฃผ์์ต๋๋ค.connect ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ๋ค๋ฅธ ํ๋ก์ ํธ์์ ์ฌ์ฉํด๋ด ์๋ค. ์ด๋ฅผ ์ํด ๊ฐ์ ๋๋ ํ ๋ฆฌ์ bina
์์ ๊ฐ์ด ์์ ํ๊ฒ ๊ฒฝ๋ก๋ฅผ ์ง์ ํ ์ด๋ฆ์ ์ฐธ์กฐํ๋ ๊ฒ์ ๋๋ฌด ๊ธธ์ด์ง ์ ์์ต๋๋ค. Rust์์๋ ์ด๋ฌํ ํธ์ถ์ ๋์ฑ ๊ฐ๊ฒฐํ๊ฒ ๋ง๋ค์ด์ฃผ๋ ํค์๋๋ฅผ ๊ฐ์ง๊ณ ์์ต๋๋ค.Rust์ use ํค์๋๋ ์ค์ฝํ ๋ด์์ ํธ์ถํ๊ณ ์ถ์ดํ๋ ํจ์์ ๋ชจ๋์ ๊ฐ์ ธ์ด์ผ๋ก์จ ๊ฐ๊ฒฐํ ํธ์ถ์ ์ฌ์ฉํ
๋ฒกํฐ์ ์ด๋ ํ ๊ฐ๋ ์ง์ด๋ฃ์ง ์์๊ธฐ ๋๋ฌธ์ ์ ์ฅํ๊ณ ์ํ๋ ์์์ ํ์ ์ ๋ช ์ํด์ฃผ์ด์ผ ํฉ๋๋ค.Rust๋ vec! ๋งคํฌ๋ก๋ฅผ ์ ๊ณตํฉ๋๋ค. vec!์ ์ด๊ธฐ๊ฐ๋ค์ ์ ์ฅํ๊ณ ์๋ ์๋ก์ด Vec ์ ์์ฑํฉ๋๋ค.struct ์ ๋ง์ฐฌ๊ฐ์ง๋ก Vec ๋ํ ์ค์ฝํ ๋ฐ์ผ๋ก ๋ฒ์ด๋ ๋ ํด์ ๋ฉ๋๋ค
Rust๋ ํต์ฌ ์ธ์ด ๊ธฐ๋ฅ ๋ด์์ ํ ๊ฐ์ง string ํ์ ๋ง ์ ๊ณตํฉ๋๋ค. ๋ฐ๋ก string slice์ธ str ์ ๋๋ค.String ํ์ ์ ํต์ฌ ์ธ์ด ๊ธฐ๋ฅ ๋ด์ ๊ตฌํ๋ ๊ฒ์ด ์๋ Rust์ ํ์ค ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ํตํด ์ ๊ณต๋ฉ๋๋ค. ๊ฐ๋ณ์ ์ด๋ฉฐ, ์ปค์ง ์ ์๊ณ , ์์ ๊ถ์ ๊ฐ์ผ๋ฉฐ
HashMap<K, V> ํ์ ์ K ํ์ ์ ํค์ V ์ฐจ์ ์ ๊ฐ์ ๋งคํํ ๊ฒ์ ์ ์ฅํฉ๋๋ค. ๋งคํ์ ํด์ฌ ํจ์(hashing function)์ ํตํด ๋์ํ๋ฉฐ, ํด์ฌ ํจ์๋ ํค์ ๊ฐ์ ๋ฉ๋ชจ๋ฆฌ ์ด๋์ ์ ์ฅํ ์ง ๊ฒฐ์ ํฉ๋๋ค. ํด์ฌ๋งต์ ์์์ ํ์ ์ผ๋ก ๋ ํค๋ฅผ ์ด์ฉํด ๋ฐ์ดํฐ
panic! ๋งคํฌ๋ก๊ฐ ์คํ๋๋ฉด ํ๋ก๊ทธ๋จ์ ์คํจ ๋ฉ์ธ์ง๋ฅผ ์ถ๋ ฅํ๊ณ , ์คํ์ ๋๊ฐ๊ณ ์ฒญ์ํ ํ ์ข ๋ฃ๋ฉ๋๋ค. ํํ ์ด๋ค ์ข ๋ฅ์ ๋ฒ๊ทธ๊ฐ ๋ฐ๊ฒฌ๋์๊ณ ํ๋ก๊ทธ๋๋จธ๊ฐ ํด๋น ์๋ฌ๋ฅผ ์ด๋ป๊ฒ ์ฒ๋ฆฌํ ์ง ๋ช ํํ์ง ์์๋ ๋ฐ์ํฉ๋๋ค.๋จ์ํ ํ๋ก๊ทธ๋จ ๋ด์์ panic! ํธ์ถ์ ์๋ํด๋ณผ ์ ์์ต
๊ตฌ์ฒดํ๋ ํ์ ์ด๋ ๋ค๋ฅธ ์์ฑ๋ค์ ๋ํด ์ถ์ํ๋ ๋๋ฆฌ์ธ์ฝ๋๋ฅผ ์์ฑํ๊ณ ์ปดํ์ผํ ๋ generic์ด ์ค์ ๋ก ์ด๋ป๊ฒ ์์ฑ๋๋์ง ์ ํ์ ์์ด generic์ ๋์ ํน์ ๋ค๋ฅธ generic๊ณผ ์ด๋ป๊ฒ ์ฐ๊ด๋๋์ง์ ๊ฐ์ ์์ฑ์ ํํ ๊ฐ๋ฅ๊ตฌ์ฒดํ๋ ํ์ ๋์ ๋ช๋ช ์ ๋ค๋ฆญ ํ์ ์ ํ๋ผ
ํ์ ๋ค์ด ๊ณตํต์ ์ผ๋ก ๊ฐ๋ ๋์์ ๋ํด ์ถ์ํ ๊ฐ๋ฅํ๋๋ก ํจ์ปดํ์ผ๋ฌ์๊ฒ ํน์ ํ ํ์ ์ด ๊ฐ๊ณ ๋ค๋ฅธ ํ์ ๋ค๊ณผ ํจ๊ป ๊ณต์ ํ ์๋ ์๋ ๊ธฐ๋ฅgeneric type parameter๋ฅผ ์ฌ์ฉํ ๋, ์ปดํ์ผ ํ์์ ํด๋น generic type์ด ์ด๋ค trait์ ๊ตฌํํ ํ์ ์ด์ด์ผ ํจ