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