Slice์ Range
Rust์์ ์ฌ๋ผ์ด์ค(Slice)๋ ๋ฐฐ์ด(array), ๋ฒกํฐ(vector)์ ๊ฐ์ ์ฐ์๋ ๋ฉ๋ชจ๋ฆฌ ์์ ์์๋ค์ ๋ํ '์กฐ๊ฐ'์ ์ฐธ์กฐํ๋ ๋ฐฉ๋ฒ์ด๋ค. ์ฌ๋ผ์ด์ค๋ ์ปดํ์ผ ํ์์ ํฌ๊ธฐ๊ฐ ๊ณ ์ ๋ ๋ฐฐ์ด๊ณผ ๋ฌ๋ฆฌ ๋ฐํ์์ ํฌ๊ธฐ๊ฐ ๊ฒฐ์ ๋๋ฉฐ, ๋ณธ์ง์ ์ผ๋ก ์์ ์์น์ ๊ธธ์ด์ ๋ํ ํฌ์ธํฐ ์ญํ ์ ํ๋ค. ์ด๋ฌํ ์ฌ๋ผ์ด์ค๋ ์์ ๊ถ์ ๊ฐ์ ธ๊ฐ์ง ์๊ณ , ๊ธฐ์กด ์ปฌ๋ ์ ์ ์ ํจ ๊ตฌ๊ฐ๋ง์ ์ฐธ์กฐํ๋ฏ๋ก, ๋ฐ์ดํฐ์ ์ผ๋ถ๋ถ๋ง ์์ ํ๊ฒ ์ฝ๊ฑฐ๋ ์์ ํ๊ณ ์ ํ ๋ ์ ์ฉํ๋ค. Rust ์ปดํ์ผ๋ฌ๋ ์ฌ๋ผ์ด์ค๋ฅผ ์ฌ์ฉํ ๋ ๋ฉ๋ชจ๋ฆฌ ์์ ์ฑ๊ณผ ๋ฒ์ ๊ฒ์ฌ๋ฅผ ์ํํ๋ฉฐ, ์ด๋ฅผ ํตํด ๋ถ๋ฒ์ ์ธ ๋ฉ๋ชจ๋ฆฌ ์ ๊ทผ ๊ฐ๋ฅ์ฑ์ ์ต์ํํ๋ค.
์ฌ๋ผ์ด์ค๋ฅผ ์ป๋ ๊ฐ์ฅ ํํ ๋ฐฉ๋ฒ ์ค ํ๋๋ ๋ฐฐ์ด ํน์ ๋ฒกํฐ์ ๋ํ์ฌ ์ฌ๋ผ์ด์ฑ ๊ตฌ๋ฌธ([start..end])์ ์ฌ์ฉํ๋ ๊ฒ์ด๋ค. ์ด ๊ตฌ๋ฌธ์์ start ์ธ๋ฑ์ค๋ ํฌํจ๋๊ณ end ์ธ๋ฑ์ค๋ ํฌํจ๋์ง ์๋๋ค. ์๋ฅผ ๋ค์ด ๋ฐฐ์ด์์ ํน์ ๋ฒ์๋ฅผ ๊ฐ์ ธ์ค๊ฑฐ๋, ๋ฒกํฐ ์์ ๋ฐ์ดํฐ ์ผ๋ถ๋ง ์ฐธ์กฐํ ๋ ์ฌ์ฉ๋๋ค. ์๋ ์์๋ ๋ฐฐ์ด๋ก๋ถํฐ ์ฌ๋ผ์ด์ค๋ฅผ ์ป๋ ๋ชจ์ต์ด๋ค.
fn main() {
let array = [10, 20, 30, 40, 50];
let slice_all = &array[..]; // ์ ์ฒด ๋ฐฐ์ด์ ๋ํ ์ฌ๋ผ์ด์ค
let slice_part = &array[1..4]; // ์ธ๋ฑ์ค 1๋ถํฐ 3๊น์ง์ ๋ํ ์ฌ๋ผ์ด์ค (20, 30, 40)
println!("์ ์ฒด ์ฌ๋ผ์ด์ค: {:?}", slice_all);
println!("๋ถ๋ถ ์ฌ๋ผ์ด์ค: {:?}", slice_part);
}์ฌ๋ผ์ด์ค๋ ์ฐธ์กฐ์ด๋ฏ๋ก ์ด๋ฅผ ์ฌ์ฉํด ๊ฐ์ ๋ณ๊ฒฝํ๊ฑฐ๋ ์ฝ์ ์ ์๋ค. ์ด๋ ๋ณ๊ฒฝ ๊ฐ๋ฅ ์ฌ๋ถ๋ ๋ถ๋ณ ์ฐธ์กฐ(&T)์ธ์ง ๊ฐ๋ณ ์ฐธ์กฐ(&mut T)์ธ์ง์ ๋ฐ๋ผ ๋ฌ๋ผ์ง๋ค. ๊ฐ๋ณ ์ฐธ์กฐ๋ฅผ ํตํด ์ฌ๋ผ์ด์ค๋ฅผ ์์ฑํ๋ฉด ์ฌ๋ผ์ด์ค์ ์์ญ ์์ ์๋ ์๋ณธ ๋ฐ์ดํฐ์ ์์ ์ด ๊ฐ๋ฅํ๋ค. ๋จ, ๋ฌ์คํธ์ ๋น๋ก์ฐ์ญ ๊ท์น(Borrow Checker)์ด ์ ์ฉ๋์ด, ์ฌ๋ผ์ด์ค๊ฐ ์ ํจํ ๋ฒ์ ๋ด์์๋ง ์ฌ์ฉ๋๋๋ก ์ปดํ์ผ ๋จ๊ณ์์ ๊ฒ์ฌํ๋ค.
์ฌ๋ผ์ด์ค๋ ๋ฐฐ์ด์ด๋ ๋ฒกํฐ๋ฟ๋ง ์๋๋ผ, String๊ณผ ๊ฐ์ ๋ค๋ฅธ ์ปฌ๋ ์ ํ์ ์์๋ ์ ์ฌํ๊ฒ ๋์ํ๋ค. ์๋ฅผ ๋ค์ด String์ ๋ํด์๋ &str ํํ๋ก ์ฌ๋ผ์ด์ค๋ฅผ ์ฌ์ฉํ ์ ์์ผ๋ฉฐ, UTF-8 ๋ฌธ์์ ๊ฒฝ๊ณ์ ์ ์ํด์ผ ํ๋ค. &str ์ฌ๋ผ์ด์ค๋ฅผ ์ป์ ๋๋ ์๋ชป๋ ๋ฐ์ดํธ ์ธ๋ฑ์ค ๊ฒฝ๊ณ๋ก ์ธํด ํ๋ก๊ทธ๋จ์ด ํจ๋์ ๋น ์ง์ง ์๋๋ก Rust์์ ์๋์ผ๋ก ๊ฒ์ฌํ๋ค.
Range๋ ๋ฒ์๋ฅผ ํํํ๋ ํ์ค ๋ผ์ด๋ธ๋ฌ๋ฆฌ์ ํต์ฌ ๊ธฐ๋ฅ ์ค ํ๋๋ก, ๊ฐ๋จํ ๋ฐ๋ณต๋ถํฐ ์ฌ๋ผ์ด์ฑ ๊ตฌ๋ฌธ๊น์ง ๋ค์ํ ๊ณณ์์ ์ฌ์ฉ๋๋ค. Range๋ a..b, a..=b, ..b, a.., .. ์ ๊ฐ์ ํ๊ธฐ ๋ฐฉ์์ผ๋ก ๋ํ๋ด๋ฉฐ, ๊ฐ ํ๊ธฐ ๋ฐฉ์์ ๋ฐ๋ผ ํฌํจ ๋ฒ์๊ฐ ๋ฌ๋ผ์ง๋ค. ์๋ฅผ ๋ค์ด a..b๋ a ์ด์ b ๋ฏธ๋ง ๋ฒ์๋ฅผ ๋ํ๋ด๊ณ , a..=b๋ a ์ด์ b ์ดํ ๋ฒ์๋ฅผ ๋ํ๋ธ๋ค. ์ฌ๋ผ์ด์ฑ ๊ตฌ๋ฌธ์์๋ ์ด๋ฌํ Range ๋ฌธ๋ฒ์ ์ฌ์ฉํ๋ฏ๋ก, ์ฌ๋ผ์ด์ค๋ฅผ ์์ฑํ ๋ start..end ๋๋ start..=end ๋ฑ์ ํํ์ ๊ทธ๋๋ก ์ ์ฉํ ์ ์๋ค.
์ฌ๋ผ์ด์ค๋ฅผ ๋ง๋ค ๋ start ๋ถ๋ถ์ด ์๋ต๋๋ฉด 0๋ถํฐ, end ๋ถ๋ถ์ด ์๋ต๋๋ฉด ์ปฌ๋ ์ ์ ๋๊น์ง๋ก ๊ฐ์ฃผํ๋ค. ์์๋ก [..end] ํํ๋ 0๋ถํฐ end ์ง์ ๊น์ง, [start..] ํํ๋ start๋ถํฐ ๋๊น์ง์ ์ฌ๋ผ์ด์ค๋ฅผ ์๋ฏธํ๋ค. ๋ํ Range๋ ๋ฐ๋ณต๋ฌธ๊ณผ ํจ๊ป ์ฌ์ฉ๋ ๋๋ ๋งค์ฐ ์ง๊ด์ ์ด๋ค. for ๋ฃจํ์์ 0..5๋ 0 ์ด์ 5 ๋ฏธ๋ง์ ์ ์๋ฅผ ์ํํ๊ณ , 1..=5๋ 1 ์ด์ 5 ์ดํ์ ์ ์๋ฅผ ์ํํ๋ค. ์๋ ์์๋ฅผ ํตํด ๋ฒ์๋ฅผ ์ด๋ป๊ฒ ํ์ฉํ ์ ์๋์ง ํ์ธํ ์ ์๋ค.
fn main() {
for i in 0..5 {
println!("i: {}", i);
}
for j in 1..=3 {
println!("j: {}", j);
}
}์ฌ๋ผ์ด์ฑ ๊ตฌ๋ฌธ์์๋ 0..5๋ฅผ ์ฌ์ฉํ์ฌ ์ธ๋ฑ์ค 0๋ถํฐ 4๊น์ง์ ํด๋นํ๋ ๋ถ๋ถ ๋ฐฐ์ด์ ์ฐธ์กฐํ ์ ์์ผ๋ฉฐ, 2..=4๋ฅผ ์ฌ์ฉํ๋ฉด ์ธ๋ฑ์ค 2๋ถํฐ 4๊น์ง(ํฌํจ)์ ์์๋ฅผ ์ฐธ์กฐํ ์ ์๋ค. ๋ค๋ง ์ฃผ์ํด์ผ ํ ์ ์ ์ฌ๋ผ์ด์ค๋ฅผ ํตํด ์ฐธ์กฐํ๋ ค๋ ์ธ๋ฑ์ค ๋ฒ์๊ฐ ์ค์ ๋ฐฐ์ด์ด๋ ๋ฒกํฐ์ ์ ํจ ๋ฒ์๋ฅผ ๋์ด์๋ฉด ๋ฐํ์์ ํจ๋์ด ๋ฐ์ํ๋ค๋ ๊ฒ์ด๋ค.
์ฌ๋ผ์ด์ค์ Range๋ ํจ๊ป ๊ฒฐํฉ๋์ด Rust ํ๋ก๊ทธ๋๋ฐ์์ ์์ ํ๊ณ ์ง๊ด์ ์ธ ์ฐ์ ๋ฐ์ดํฐ ์ ๊ทผ ๋ฐฉ์์ ์ ๊ณตํ๋ค. ์ฌ๋ผ์ด์ค๋ ๊ธฐ์กด ์ปฌ๋ ์ ์ ๋ฉ๋ชจ๋ฆฌ ๊ณต๊ฐ์ ํจ์จ์ ์ผ๋ก ์ฌํ์ฉํ๋ฉฐ, Range๋ ์ด๋ค ๋ฒ์๋ฅผ ์ฝ๊ฒ ์ง์ ํ๊ณ ์ํํ ์ ์๋๋ก ๋์์ค๋ค. ๋ฌ์คํธ์ ์๊ฒฉํ ์์ ๊ถ ๋ฐ ๋น๋ก์ฐ์ญ ๊ท์น๊ณผ ๊ฒฐํฉ๋์ด, ์ฌ๋ผ์ด์ค์ Range๋ ๋ฉ๋ชจ๋ฆฌ ์์ ์ฑ์ ํ๋ณดํ๋ฉด์๋ ๋์ ์ฑ๋ฅ์ ์ ์งํ ์ ์๊ฒ ํ๋ค. ์ด๋ฌํ ๊ธฐ๋ฅ๋ค์ ๋๊ท๋ชจ ์์คํ ํ๋ก๊ทธ๋๋ฐ๋ถํฐ ๊ฐ๋จํ ์คํฌ๋ฆฝํธ์ฑ ์์ ๊น์ง, ํญ๋์ ํ๊ฒฝ์์ ์ ์ฉํ๊ฒ ํ์ฉ๋๋ค.
Last updated