Option, Iterator, Clone, Copy
๋ฌ์คํธ์์ ๊ฐ์ ์ ๋ฌด๋ฅผ ์์ ํ๊ฒ ํํํ๊ธฐ ์ํด ์ฌ์ฉ๋๋ Option ํ์ ์ ๋งค์ฐ ์ค์ํ ๊ฐ๋ ์ด๋ค. ์ด ํ์ ์ None๊ณผ Some(T)๋ผ๋ ๋ ๊ฐ์ง ๋ถ๊ธฐ๋ก ๊ตฌ์ฑ๋ ์ด๊ฑฐํ์ด๋ฉฐ, ๊ฐ์ด ์์ ์ ์๋ ์ํฉ์ ๋ช ์์ ์ผ๋ก ํํํ๊ธฐ ๋๋ฌธ์ ๋ฐํ์ ์ค๋ฅ๋ฅผ ์ค์ด๋ ๋ฐ ํฐ ๋์์ด ๋๋ค. ์๋ฅผ ๋ค์ด ์ด๋ค ํจ์๊ฐ ๊ฒ์ ๊ฒฐ๊ณผ๋ก ์ค์ ๊ฐ์ด ์์ ์ ์๋ค๋ฉด Option์ ๋ฐํํด ์๋์ ์ผ๋ก None์ ๋ฐํํ๋๋ก ๋ง๋ค ์ ์๋ค. None์ ๋ํ ์ฒ๋ฆฌ๋ฅผ ์ปดํ์ผ ํ์์ ๊ฐ์ ํ๊ธฐ ๋๋ฌธ์ ์์ ํ ํ๋ก๊ทธ๋๋ฐ์ ์ ๋ํ๋ค.
Option ํ์ ์ ์ฌ์ฉํ ๋๋ match ๊ตฌ๋ฌธ์ ๋ง์ด ์ฌ์ฉํ๋ค. Rust์ ํจํด ๋งค์นญ์ ๋งค์ฐ ๊ฐ๋ ฅํ๋ฉฐ, ๊ฐ ์ผ์ด์ค์ ๋ํด ๊ตฌ์ฒด์ ์ผ๋ก ๋ช ์ํ ์ ์๋ค. ๊ฐ์ด ์์ ๋(Some)์ ์์ ๋(None)์ ๋ํ ์ฒ๋ฆฌ๊ฐ ์ฝ๋ ์์์ ๋ชจ๋ ๋๋ฌ๋๊ธฐ ๋๋ฌธ์ ์ฝ๋์ ๊ฐ๋ ์ฑ๊ณผ ์์ ์ฑ์ด ํฅ์๋๋ค. ๋ํ Option์๋ ๋ฉ์๋ ์ฒด์ด๋์ ํ์ฉํ ์ ์๋ ๊ฐ์ข ํฌํผ ๋ฉ์๋๊ฐ ๋ง์ด ์ ๊ณต๋๋ค. ์๋ฅผ ๋ค์ด unwrap_or, map, and_then ๊ฐ์ ๋ฉ์๋๋ฅผ ํตํด match๋ฅผ ์ง์ ์์ฑํ์ง ์๊ณ ๋ ๊ฐ๋จํ ๋ก์ง ์ฒ๋ฆฌ๋ฅผ ํ ์ ์๋ค. ๊ทธ๋ฌ๋ ์์ ์ฑ์ ์ค์ํ๊ธฐ ์ํด์๋ match ๊ตฌ๋ฌธ ํน์ ์ ์ ํ ๋ฉ์๋๋ฅผ ์ฌ์ฉํ๋ ํธ์ด ์ข๋ค.
์๋ ์ฝ๋๋ Option์ ํ์ฉํ๋ ์์์ด๋ฉฐ, None์ธ ๊ฒฝ์ฐ์ Some์ธ ๊ฒฝ์ฐ๋ฅผ ๋๋์ด ์ฒ๋ฆฌํ๋ ๋ชจ์ต์ ๋ณด์ฌ์ค๋ค.
fn find_even_number(numbers: &[i32]) -> Option<i32> {
for &num in numbers {
if num % 2 == 0 {
return Some(num);
}
}
None
}
fn main() {
let list = vec![1, 3, 5, 8, 10];
let result = find_even_number(&list);
match result {
Some(val) => println!("์ง์๋ฅผ ์ฐพ์๋ค: {}", val),
None => println!("์ง์๋ฅผ ์ฐพ์ง ๋ชปํ์๋ค"),
}
let default_number = result.unwrap_or(-1);
println!("๊ฒฐ๊ณผ๊ฐ ์์ผ๋ฉด -1์ ์ฌ์ฉํ๋ค: {}", default_number);
}Iterator๋ ์ปฌ๋ ์ ์ด๋ ๊ทธ ์ธ ๋ฐ๋ณต ๊ฐ๋ฅํ ๊ตฌ์กฐ์์ ์์๋ฅผ ์ํํ๊ธฐ ์ํ ํต์ฌ ๊ธฐ๋ฅ์ด๋ค. ๋ฌ์คํธ์ Iterator ํธ๋ ์ดํธ๋ next ๋ฉ์๋๋ฅผ ์ฌ์ฉํ์ฌ ๋ฐ๋ณต ์๋ง๋ค ๋ค์ ๊ฐ์ ๋ฐํํ๋ค. next๊ฐ None์ ๋ฐํํ๋ฉด ๋ฐ๋ณต์ด ์ข ๋ฃ๋๋ค. ๋ฐ๋ณต์๋ ์์ ๊ถ, ์ฐธ์กฐ, ๊ฐ๋ณ ์ฐธ์กฐ ๋ฑ ๋ค์ํ ํํ์ ์ดํฐ๋ ์ดํฐ๋ฅผ ์ ๊ณตํ๋ฉฐ, ์ด ๋ ์๋ชจ์ฑ(consume) ๋ฉ์๋์ ๋ฐ์๋ชจ์ฑ(adapt) ๋ฉ์๋๋ฅผ ์ ์ ํ ๊ตฌ๋ถํด์ ์ฌ์ฉํ๋ ๋ฐฉ์์ด ์ ์ฉํ๋ค. ์๋ฅผ ๋ค์ด collect, fold, find ๊ฐ์ ๋ฉ์๋๋ ์ดํฐ๋ ์ดํฐ๋ฅผ ์๋ชจํ๋ฉด์ ๊ฒฐ๊ณผ๋ฅผ ๋ง๋ค์ด๋ด๊ณ , map, filter, take์ ๊ฐ์ ๋ฉ์๋๋ ์ดํฐ๋ ์ดํฐ๋ฅผ ๋ค๋ฅธ ์ดํฐ๋ ์ดํฐ๋ก ๋ณํํ๋ฉฐ ๊ณ์ ์ฒด์ด๋ํ ์ ์๋ค.
์ดํฐ๋ ์ดํฐ๋ for ๋ฃจํ์์๋ ์์ฃผ ํ์ฉ๋๋ค. for ๋ฃจํ๋ ๋ด๋ถ์ ์ผ๋ก Iterator ํธ๋ ์ดํธ๋ฅผ ์ฌ์ฉํด ์ํํ๋ค. ๋ฐ๋ผ์ rust์์ for ... in ๊ตฌ๋ฌธ์ ์ฌ์ฉํ ์ ์๋ ๋ชจ๋ ์๋ฃ๊ตฌ์กฐ๋ ๊ฒฐ๊ตญ Iterator๋ฅผ ๊ตฌํํ๊ณ ์๋ค๊ณ ๋ณด๋ฉด ๋๋ค. ์๋๋ ์ดํฐ๋ ์ดํฐ ๋ฉ์๋๋ฅผ ์ฒด์ด๋ํ์ฌ ํํฐ๋ง๊ณผ ๋งตํ์ ๊ฑฐ์น ๋ค ์ต์ข ์ ์ผ๋ก ๋ฒกํฐ๋ก ์์งํ๋ ์์๋ค.
Clone์ ์ผ๋ฐ์ ์ผ๋ก โ๋ณต์ โ๊ฐ ํ์ํ ํ์ ์ ๊ตฌํ๋๋ ํธ๋ ์ดํธ๋ค. Clone ํธ๋ ์ดํธ๋ฅผ ๊ตฌํํ๋ฉด .clone() ๋ฉ์๋๋ฅผ ํตํด ๊ฐ์ฒด์ ์ํ๋ฅผ ๊ทธ๋๋ก ๋ณต์ฌํ ์ ์๋ค. ๊ทธ๋ฌ๋ Rust์์ ๊น์ ๋ณต์ฌ(deep copy)๊ฐ ์ผ์ด๋ ๋ ๋๋ ๋น์ฉ์ ๋ํด ํ๋ก๊ทธ๋๋จธ๊ฐ ๋ช ์์ ์ผ๋ก ์ธ์งํ๊ฒ ํ๋ ค๋ ์๋๊ฐ ์๊ธฐ ๋๋ฌธ์, Clone์ ํธ์ถํด์ผ๋ง ๊ฐ์ฒด๊ฐ ๋ณต์ ๋๋ค๋ ์ฌ์ค์ ๋ช ํํ ํํํ๋ค. ์๋ฅผ ๋ค์ด ๋ฒกํฐ, ๋ฌธ์์ด(String), ์ฌ์ฉ์ ์ ์ ๊ตฌ์กฐ์ฒด ๋ฑ์ Clone์ ํตํด ๋ณต์ฌํ ๋ ์๋ก์ด ๋ฉ๋ชจ๋ฆฌ๋ฅผ ํ ๋นํ๊ฑฐ๋ ๋ด๋ถ ๋ฐ์ดํฐ๋ฅผ ์ ๋ถ ๋ณต์ ํด์ผ ํ๋ค.
Clone ํธ๋ ์ดํธ๋ฅผ ๊ตฌํํ๋ ํ์ ์ ๋ณ๋์ ๋ก์ง์ผ๋ก ๋ณต์ ๋ฅผ ์ ์ดํ ์๋ ์๋ค. ์๋ฅผ ๋ค์ด ์ด๋ค ๊ตฌ์กฐ์ฒด ๋ด์ ๋ณต์ ๋น์ฉ์ด ํฐ ํ๋๊ฐ ์๋ค๋ฉด, Clone ๊ตฌํ์์ ๊ทธ๊ฒ์ ์ด๋ป๊ฒ ๋ณต์ ํ ์ง ์ธ๋ถ์ ์ผ๋ก ์ ์ํ ์ ์๋ค. ๊ธฐ๋ณธ์ ์ธ Clone ํ์(derive)๋ ๊ฐ๋ฅํ์ง๋ง, ๋ณต์กํ ๊ฐ์ฒด๋ผ๋ฉด ์๋ ๊ตฌํ์ด ํ์ํ ์๋ ์๋ค.
Copy๋ Clone๊ณผ ๋ค๋ฅด๊ฒ โ๊น์ ๋ณต์ฌโ๊ฐ ์๋ โ๋นํธ ๋จ์ ๋ณต์ฌโ๋ฅผ ์๋ฏธํ๋ ํธ๋ ์ดํธ์ด์ ๋ง์ปค ํธ๋ ์ดํธ๋ค. Copy๋ฅผ ๊ตฌํํ ์ ์๋ ํ์ ์ ๋ฐํ์ ๋ณต์ฌ ๋น์ฉ์ด ๋ฌด์ํ ์ ์์ ์ ๋๋ก ์์ผ๋ฉฐ, ๋๋ถ๋ถ ์คํ์ ์ง์ ๋ฐฐ์น๋๋ ๋ฐ์ดํฐ์ด๋ค. i32, f64 ๊ฐ์ ๊ธฐ๋ณธ ์ ์, ๋ถ๋์์์ , ๋ถ๋ฆฌ์ธ ๋ฑ์ด ๋ํ์ ์ผ๋ก Copy ํ์ ์ด๋ค. Copy ํธ๋ ์ดํธ๊ฐ ์ ์ฉ๋ ํ์ ์ ๋ณ์ ์ด๋์ด ๋ฐ์ํ์ง ์๊ณ ๋ณต์ฌ๊ฐ ์์ฐ์ค๋ฝ๊ฒ ์ผ์ด๋๋ค. ์ฆ, Copy๊ฐ ๊ฐ๋ฅํ ํ์ ์ ๊ฐ์ ๋ค๋ฅธ ๋ณ์์ ๋์ ํด๋ ์๋ณธ ๋ณ์๊ฐ ์ ํจ์ฑ์ ์์คํ์ง ์๋๋ค.
Copy๋ Clone์ ์์ํ๋ ๊ตฌ์กฐ์ด๋ฏ๋ก Copy ํธ๋ ์ดํธ๊ฐ ์ ์ฉ๋ ํ์ ์ ์๋์ผ๋ก Clone๋ ๊ตฌํํ์ง๋ง, Copy ํธ๋ ์ดํธ๊ฐ ์ ์ฉ๋๋ ์๊ฐ .clone() ๋ฉ์๋๋ ๊ตณ์ด ํธ์ถํ ํ์๊ฐ ์์ด์ง๋ค. Copy ํธ๋ ์ดํธ๋ฅผ ์ ์ฉํ๋ ค๋ฉด ํ์ ๋ด๋ถ์ ์ฐธ์กฐ ํ์ ์ด๋ ์์ ๊ถ์ด ๋ฐ์ํ ์ ์๋ ํ๋ ๋ฑ์ด ์์ด์ผ ํ๋ค. ๋ฐ๋ผ์ Vec์ด๋ String์ฒ๋ผ ํ์ ์ฌ์ฉํ๋ ํ์ ์ Copy๊ฐ ๋ถ๊ฐ๋ฅํ๊ณ Clone๋ง ๊ฐ๋ฅํ๋ค. Copy์ Clone์ ์ฐจ์ด๋ฅผ ์ ํํ ์ดํดํ๋ฉด Rust์ ๋ฉ๋ชจ๋ฆฌ ๋ชจ๋ธ์ ๋์ฑ ์์ ํ๊ณ ํจ์จ์ ์ผ๋ก ํ์ฉํ ์ ์๋ค.
์๋ ์์์์๋ i32๋ Copy ํ์ ์ด๋ฏ๋ก ๊ฐ์ด ๊ทธ๋๋ก ๋ณต์ฌ๋์ด a, b ๋ณ์๊ฐ ๋ชจ๋ ์ ํจํ๋ค. Vec๋ Copy๊ฐ ๋ถ๊ฐ๋ฅํ ํ์ ์ด๋ฏ๋ก ์ด๋์ด ๋ฐ์ํ๋ฉฐ, ์ด๋ ํ ์๋ณธ ๋ณ์๋ฅผ ์ฌ์ฉํ๋ ค๊ณ ํ๋ฉด ์ปดํ์ผ ์๋ฌ๊ฐ ๋๋ค.
Option, Iterator, Clone, Copy๋ ๋ชจ๋ Rust์ ์์ ํ ๋ฉ๋ชจ๋ฆฌ ๋ชจ๋ธ๊ณผ ๊ด๋ จ๋ ์ค์ํ ๊ตฌ์ฑ ์์๋ค์ด๋ค. Option์ผ๋ก ๊ฐ์ ์กด์ฌ ์ฌ๋ถ๋ฅผ ์๊ฒฉํ๊ฒ ๋ค๋ฃจ๊ณ , Iterator๋ก ์ปฌ๋ ์ ์ ์์๋ฅผ ํจ์จ์ ์ผ๋ก ์ํํ๋ฉฐ, Clone๊ณผ Copy๋ฅผ ํตํด ๋ณต์ ์ ์ฑ ์ ๋ช ํํ ๊ตฌ๋ถํจ์ผ๋ก์จ ๋ฐํ์ ์ค๋ฅ๋ฅผ ์ค์ด๊ณ ์ฑ๋ฅ ์ ํ๋ฅผ ์ต์ํํ ์ ์๋ค. ์ด๋ฌํ ํ์ค ๋ผ์ด๋ธ๋ฌ๋ฆฌ์ ํธ๋ ์ดํธ์ ์ค๊ณ๋ Rust๋ฅผ ์์ ํ๋ฉด์๋ ๋น ๋ฅธ ์ธ์ด๋ก ๋ง๋๋ ํฐ ๊ธฐ๋ฐ์ด ๋๋ค.
Last updated