์์
#[derive(Debug)] struct Race { name: String, laps: Vec<i32>, } impl Race { fn new(name: &str) -> Race { // No receiver, a static method Race { name: String::from(name), laps: Vec::new() } } fn add_lap(&mut self, lap: i32) { // Exclusive borrowed read-write access to self self.laps.push(lap); } fn print_laps(&self) { // Shared and read-only borrowed access to self println!("Recorded {} laps for {}:", self.laps.len(), self.name); for (idx, lap) in self.laps.iter().enumerate() { println!("Lap {idx}: {lap} sec"); } } fn finish(self) { // Exclusive ownership of self let total = self.laps.iter().sum::<i32>(); println!("Race {} is finished, total lap time: {}", self.name, total); } } fn main() { let mut race = Race::new("Monaco Grand Prix"); race.add_lap(70); race.add_lap(68); race.print_laps(); race.add_lap(71); race.print_laps(); race.finish(); // race.add_lap(42); }
ํค ํฌ์ธํธ:
- ์ด ๋ค ๊ฐ์ ๋ฉ์๋๋ ์๋ก ๋ค๋ฅธ ์ ํ์ ๋ฆฌ์๋ฒ๋ฅผ ์ฌ์ฉํฉ๋๋ค.
- ๋ฆฌ์๋ฒ์ ์ ํ์ ๋ฐ๋ผ ํจ์๊ฐ ํ ์ ์๋ ์ผ์ด ๋ฌ๋ผ์ง๊ณ , ๋ ๋ฉ์๋๋ฅผ ํธ์ถํ ๋ค
main
์์ ํด๋น ๊ฐ์ฒด๋ฅผ ์ฌ์ฉํ ์ ์๋์ง ์ฌ๋ถ๋ ๋ฌ๋ผ์ง๋ค๋ ์ ์ ๊ฐ์กฐํ์ธ์. finish
๋ฅผ ๋๋ฒ ํธ์ถํ์ฌ ์ค๋ฅ๊ฐ ๋ฐ์ํ๋ ๊ฒ์ ๋ณด์ผ ์ ์์ต๋๋ค.
- ๋ฆฌ์๋ฒ์ ์ ํ์ ๋ฐ๋ผ ํจ์๊ฐ ํ ์ ์๋ ์ผ์ด ๋ฌ๋ผ์ง๊ณ , ๋ ๋ฉ์๋๋ฅผ ํธ์ถํ ๋ค
- ๋น๋ก ๋ฉ์๋ receiver๋ ๋ค๋ฅด์ง๋ง main ํจ์์์ ๋น ์ ์ ํจ์๋ฅผ ๋ถ๋ฅด๋ ๋ฐฉ๋ฒ์ ๊ฐ์ต๋๋ค. ๋ฌ์คํธ๋ ๋ฉ์๋๋ฅผ ํธ์ถํ ๋ ์๋์ผ๋ก ์ฐธ์กฐ/์ญ์ฐธ์กฐ(๋ฐ๋ผ๊ฐ๊ธฐ)๋ฅผ ์ํํฉ๋๋ค. ๋ฌ์คํธ๋ ๊ฐ์ฒด์ ๋งค์๋ ์๊ทธ๋์ฒ๊ฐ ์๋ก ๋งค์น๋๋๋ก ๊ฐ์ฒด์
&
,*
,muts
๋ฅผ ์๋์ผ๋ก ๋ถ์ฌ์ค๋๋ค. print_laps
ํจ์์์ ๋ฒกํฐ๋ฅผ ์ด๋ค ์์ผ๋ก ์ฌ์ฉํ๊ณ ์๋์ง ์ธ๊ธํ๋ ๊ฒ๋ ์ข์ต๋๋ค. ๋ฒกํฐ๋ ์คํ ๊ฐ์์์ ๋ ์์ธํ ์ค๋ช ํ ๊ฒ์ ๋๋ค.