๊ตฌ์กฐ์ฒด์์์ ์๋ช
์ด๋ค ํ์ ์ด ๋น๋ ค์จ ๋ฐ์ดํฐ๋ฅผ ์ ์ฅํ๊ณ ์๋ค๋ฉด, ๋ฐ๋์ ์๋ช ์ ํ์ํด์ผ ํฉ๋๋ค:
#[derive(Debug)] struct Highlight<'doc>(&'doc str); fn erase(text: String) { println!("์๋ {text}!"); } fn main() { let text = String::from("The quick brown fox jumps over the lazy dog."); let fox = Highlight(&text[4..19]); let dog = Highlight(&text[35..43]); // erase(text); println!("{fox:?}"); println!("{dog:?}"); }
This slide should take about 5 minutes.
- ์์ ์์ ์์
Highlight
์ ์ด๋ ธํ ์ด์ (<'doc>
)์ ์ ์ด๋Highlight
์ธ์คํด์ค๊ฐ ์ด์์๋ ๋์์๋ ๊ทธ ๋ด๋ถ์&str
๊ฐ ๊ฐ๋ฆฌํค๋ ๋ฐ์ดํฐ ์ญ์ ์ด์์์ด์ผ ํ๋ค๋ ๊ฒ์ ์๋ฏธํฉ๋๋ค. - ๋ง์ฝ
text
๊ฐfox
(ํน์dog
)์ ์๋ช ์ด ๋คํ๊ธฐ ์ ์erase
ํจ์ ํธ์ถ ๋ฑ์ผ๋ก ์ฌ๋ผ์ง๊ฒ ๋๋ค๋ฉด ๋น๋ฆผ ๊ฒ์ฌ๊ธฐ๊ฐ ์๋ฌ๋ฅผ ๋ฐ์ํฉ๋๋ค. - ๋น๋ฆฐ ๋ฐ์ดํฐ๋ฅผ ๊ฐ์ง๊ณ ์๋ ํ์ ์ ์ฌ์ฉ์๋ก ํ์ฌ๊ธ ์๋ณธ ๋ฐ์ดํฐ๋ฅผ ์ ์งํ๋๋ก ๊ฐ์ ํฉ๋๋ค. ์ด๋ฐ ํ์ ์ ๊ฒฝ๋ ๋ทฐ(lightweight view)๋ฅผ ๋ง๋๋๋ฐ ์ ์ฉํ์ง๋ง, ์ด ์ ์ฝ ์กฐ๊ฑด ๋๋ฌธ์ ์ด๋ฐ ํ์ ์ ์ฌ์ฉํ๋ ๊ฒ์ด ์ฝ์ง๋ง์ ์์ต๋๋ค.
- ๋ฐ๋ผ์, ๊ฐ๋ฅํ๋ค๋ฉด, ๊ตฌ์กฐ์ฒด๊ฐ ์์ ์ ๋ฐ์ดํฐ๋ฅผ ์ง์ ์์ ํ๋๋ก ํ๋ ๊ฒ์ด ์ข์ต๋๋ค.
- ํ ๊ตฌ์กฐ์ฒด์์ ์ฌ๋ฌ ์ฐธ์กฐ๊ฐ ์์ผ๋ฉด์, ์ด ์ฐธ์กฐ๋ค์ ์๋ช ์ด ์๋ก ๋ค๋ฅด๊ฒ ์ง์ ๋๋ ๊ฒฝ์ฐ๋ ์์ต๋๋ค. ์ด๋ ์ฐธ์กฐ์ ๊ทธ ๊ตฌ์กฐ์ฒด ๊ฐ์ ๊ด๊ณ ๋ฟ๋ง์ด ์๋๋ผ, ๊ทธ ์ฐธ์กฐ๋ค ์ฌ์ด์ ์๋ช ๊ด๊ณ๋ฅผ ์ค๋ช ํด์ผ ํ ๊ฒฝ์ฐ์ ํ์ํฉ๋๋ค. ๋งค์ฐ ๊ณ ๊ธ ๊ธฐ์ ์ ๋๋ค.