[Rust] ๊ตฌ์กฐ ๋ถ„ํ•ด(Destructuring)

๋Ÿฌ์ŠคํŠธ๋„ ๋‹ค๋ฅธ ์–ธ์–ด๋“ค๊ณผ ๋งˆ์ฐฌ๊ฐ€์ง€๋กœ ๋ถ„ํ•ด ํ• ๋‹น(Destructuering assignment)๋ผ๋Š” ํŽธ์˜๊ธฐ๋Šฅ์„ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค.

์ด๊ฒŒ ๋ญ๋ƒํ•˜๋ฉด, ๋ฐฐ์—ด ๋“ฑ์˜ ๋ณตํ•ฉํƒ€์ž…์„ ์ง๊ด€์ ์ด๊ณ  ํŽธ๋ฆฌํ•˜๊ฒŒ ๋ฐ”๋กœ ๊ฐ์ž์˜ ๋ณ€์ˆ˜์— ์ชผ๊ฐœ์„œ ํ• ๋‹นํ•  ์ˆ˜ ์žˆ๊ฒŒ ํ•ด์ฃผ๋Š” ๊ฒƒ์ด๋‹ค.

์ด ํฌ์ŠคํŠธ์—์„  ์ผ๋ถ€ ์‚ฌ์šฉ์„ฑ์„ ์ค‘์‹ฌ์œผ๋กœ ์„ค๋ช…ํ•œ๋‹ค๋งŒ, ์‚ฌ์‹ค ๋‚ด๋ถ€์ ์œผ๋กœ๋Š” ์ „๋ถ€ ๋‹ค ๋Ÿฌ์ŠคํŠธ 'ํŒจํ„ด' ๋ฌธ๋ฒ•์˜ ์ผ์ข…์ด๋‹ค.
๊ทผ๋ฐ ๊ทธ๊ฒŒ ์ค‘์š”ํ•œ๊ฑด ์•„๋‹ˆ๋‹ˆ ๋„˜์–ด๊ฐ€์ž.


๋ฐฐ์—ด ๋ถ„ํ•ด
let ๋’ค ๋ณ€์ˆ˜๋ช…๋“ค์„ ๋Œ€๊ด„ํ˜ธ๋กœ ๋ฌถ๊ณ , ๋ฐฐ์—ด์„ ํ• ๋‹น๋ฐ›์œผ๋ฉด ๋œ๋‹ค. ๊ทธ๋Ÿผ ๋ฐฐ์—ด ๋‚ด ๊ฐ’์„ ์ˆœ์„œ๋Œ€๋กœ ๊ฐ๊ฐ ํ• ๋‹นํ•ด์ค€๋‹ค. image

image

๊ทธ๋ฆฌ๊ณ  ์›๋ž˜๋Š” ๋ฐฐ์—ด ๊ฐœ์ˆ˜์™€ ๋ณ€์ˆ˜ ๊ฐœ์ˆ˜๋ฅผ ๋งž์ถฐ์•ผํ–ˆ๋Š”๋ฐ, ๊ทผ๋ž˜ ๋ฒ„์ „์—์„œ ๊ฐœ์„ ๋˜์–ด image

image

image ..๋กœ ๋น„์›Œ๋‘˜ ๋ถ€๋ถ„์„ ํ‘œ์‹œํ•ด๋†“๊ณ  ์ผ๋ถ€๋งŒ ๋ฐ›์„ ์ˆ˜๋„ ์žˆ๊ฒŒ ๋˜์—ˆ๋‹ค.

์ด๊ฑด ๋‚ด์žฅ๋ฐฐ์—ด๋งŒ ๋˜๊ณ  ๋ฒกํ„ฐ๊ฐ™์€๋ฐ๋Š” ๋ชป์“ด๋‹ค.


ํŠœํ”Œ ๋ถ„ํ•ด
ํŠœํ”Œ๋„ ๋งˆ์ฐฌ๊ฐ€์ง€๋กœ ์ชผ๊ฐœ๋„ฃ์„ ์ˆ˜ ์žˆ๋‹ค.
๋ณ€์ˆ˜๋ช…๋“ค์„ ์†Œ๊ด„ํ˜ธ๋กœ ๋ฌถ๊ณ , ํŠœํ”Œ๊ฐ’์„ ๋Œ€์ž…ํ•˜๋ฉด ๋œ๋‹ค. image

image

ํŠœํ”Œ์˜ ๊ฒฝ์šฐ์—” ํ•„์š”์—†๋Š” ๊ฐ’์— _๋ฅผ ๋„ฃ์–ด์„œ ๋Œ€๊ฐ• ๋นผ๋‘˜ ์ˆ˜ ์žˆ๋‹ค. image

image


๊ตฌ์กฐ์ฒด ๋ถ„ํ•ด
์ผ๋ฐ˜์ ์ธ struct ๊ตฌ์กฐ์ฒด๋“ค์—๋„ ๋ถ„ํ•ด๋ฅผ ๊ฐ€ํ•  ์ˆ˜ ์žˆ๋‹ค. ๋ณ€์ˆ˜๋ช…์„ ํƒ€์ž…๋ช…{...}๋กœ ๊ฐ์‹ธ๋ฉด ๋œ๋‹ค.
๊ทธ๋Ÿฌ๋ฉด ๊ฐ์ฒด์˜ ๊ฐ’์ด ๊ทธ๋Œ€๋กœ ๋“ค์–ด๊ฐˆ ๊ฒƒ์ด๋‹ค.

์œ ์˜ํ•  ์ ์€, ๊ฐ ๋ณ€์ˆ˜๋ช…์„ ์‹ค์ œ ๊ตฌ์กฐ์ฒด์˜ ํ•„๋“œ๋ช…๊ณผ ๋งž์ถฐ์ค˜์•ผ ํ•œ๋‹ค๋Š” ๊ฒƒ์ด๋‹ค. image

image

๋งŒ์•ฝ ๋ช‡๊ฐœ๋งŒ ๊ณจ๋ผ์“ฐ๊ณ  ๋‚˜๋จธ์ง€๋Š” ๋ฒ„๋ฆฌ๊ณ ์‹ถ๋‹ค๋ฉด, ..๋ฅผ ๋’ค์— ๋ถ™์ด๋ฉด ๋œ๋‹ค. image

image

image

๊ทธ๋ ‡๋‹ค.


์ฐธ์กฐ
https://doc.rust-lang.org/stable/rust-by-example/flow_control/match/destructuring/destructure_tuple.html
https://stackoverflow.com/questions/45782069/is-there-a-way-to-destructure-a-struct-partially