๋ฉ์๋
๋ฌ์คํธ์์ ์ ์ธ๋ ํ์
์ ๋ํด impl
๋ธ๋ก์ ํจ์๋ฅผ ์ ์ธํ์ฌ ๋ฉ์๋๋ฅผ ์ฐ๊ฒฐ ํ ์ ์์ต๋๋ค:
#[derive(Debug)] struct Person { name: String, age: u8, } impl Person { fn say_hello(&self) { println!("Hello, my name is {}", self.name); } } fn main() { let peter = Person { name: String::from("Peter"), age: 27, }; peter.say_hello(); }
ํค ํฌ์ธํธ:
- ๋ฉ์๋๋ฅผ ํจ์์ ๋น๊ตํ์ฌ ์๊ฐํ๋ ๊ฒ๋ ๋์์ด ๋ ์ ์์ต๋๋ค.
- ๋ฉ์๋๋ ๊ตฌ์กฐ์ฒด๋ ์ด๊ฑฐํ๊ณผ ๊ฐ์ ํ์
์ ์ธ์คํด์ค์์ ํธ์ถ ๋๋ฉฐ, ์ฒซ๋ฒ์งธ ๋งค๊ฐ๋ณ์(ํ๋ผ๋ฉํฐ)๋ ์ธ์คํด์ค๋ฅผ
self
๋ก ํ๊ธฐํฉ๋๋ค. - ๋ฉ์๋๋ฅผ ์ด์ฉํ๋ฉด receiver ๋ฌธ๋ฒ์ ์ฌ์ฉํ ์ ์๊ณ ์ฝ๋๋ฅผ ์ข๋ ์ฒด๊ณ์ ์ผ๋ก ์ ๋ฆฌํ ์ ์์ต๋๋ค. ๋ฉ์๋๋ค์ด ์์ธก ๊ฐ๋ฅํ ์์น์ ๋ชจ์ฌ ์์ผ๋ ์ฐพ๊ธฐ ์ฝ์ต๋๋ค.
- ๋ฉ์๋๋ ๊ตฌ์กฐ์ฒด๋ ์ด๊ฑฐํ๊ณผ ๊ฐ์ ํ์
์ ์ธ์คํด์ค์์ ํธ์ถ ๋๋ฉฐ, ์ฒซ๋ฒ์งธ ๋งค๊ฐ๋ณ์(ํ๋ผ๋ฉํฐ)๋ ์ธ์คํด์ค๋ฅผ
- ๋ฉ์๋ receiver์ธ
self
ํค์๋ ์ฌ์ฉ์ ์ธ๊ธํด ์ฃผ์๊ธฐ ๋ฐ๋๋๋ค.- ์์ ์ ๊ฒฝ์ฐ
self: &Self
์ ์ค์ธ ๋ฒ์ ์์ ์๋ ค์ฃผ๊ณ , ๊ตฌ์กฐ์ฒด์ ์ด๋ฆ์ ์ง์ ์ฌ์ฉํ๋ฉด ์ด๋ป๊ฒ ๋๋์ง ๋ณด์ฌ์ฃผ๋ ๊ฒ๋ ์ข์ต๋๋ค. impl
๋ธ๋ก ๋ด๋ถ์์๋Self
๊ฐ ํด๋น ํ์ ์ ์ด๋ฆ ๋์ฉ์ผ๋ก ์ฌ์ฉ๋ ์ ์์์ ์๋ ค์ฃผ์ธ์.- ๊ตฌ์กฐ์ฒด์ ํ๋๋ฅผ ์ ๊ทผํ ๋ ์ ํ๊ธฐ๋ฅผ ์ฌ์ฉํ๋ฏ์ด
self
์ ์ ํ๊ธฐ๋ฅผ ์ฌ์ฉํ์ฌ ๊ฐ๋ณ ํ๋๋ค์ ์ ๊ทผํ ์ ์์ต๋๋ค. say_hello
ํจ์๊ฐ ๋ ๋ฒ ํธ์ถ๋๋๋ก ์ฝ๋๋ฅผ ์์ ํ์ฌ&self
์self
๊ฐ ์ด๋ป๊ฒ ๋ค๋ฅธ์ง ๋ณด์ฌ์ฃผ๋ ๊ฒ๋ ์ข์ต๋๋ค.
- ์์ ์ ๊ฒฝ์ฐ
- ๋ค์ ์ฌ๋ผ์ด๋์์ receiver์ ๊ตฌ๋ถ์ ์ค๋ช ํฉ๋๋ค.