오늘은 우리가 만든 데이터에 '생명력'을 불어넣어 줄 아주 멋진 도구인 **'impl(임플) 블록'**에 대해 알아볼게요.
---
지난 시간에 배운 **구조체(데이터를 담는 주머니)**가 '붕어빵의 재료(팥, 밀가루)'를 정하는 것이라면, 오늘 배울 **메서드(데이터가 할 수 있는 동작)**는 그 붕어빵이 하는 '개인기'라고 생각하면 쉬워요.
* **구조체(Struct):** 붕어빵의 설계도 (이름, 속재료 등)
* **impl 블록:** 붕어빵에게 기술을 가르치는 '훈련소'
* **메서드(Method):** 붕어빵이 훈련소에서 배운 '노래하기', '춤추기' 같은 기술
즉, **impl**은 "이 데이터는 이런 기능을 할 수 있어!"라고 정의해 주는 상자랍니다.
---
컴퓨터에게 "이 구조체는 이런 동작을 할 수 있어"라고 알려줄 때는 `impl`(implementation, 구현 - 기능을 실제로 만드는 것)이라는 글자를 사용합니다.
struct Dog { // '강아지'라는 이름의 데이터 주머니를 만들어요.
name: String, // 강아지는 '이름'이라는 정보를 가집니다.
}
impl Dog { // 지금부터 '강아지'가 할 수 있는 동작(기능)을 적어볼게요.
fn bark(&self) { // '짖기'라는 메서드(동작)를 만듭니다.
println!("멍멍! 나는 {}야!", self.name); // 자기 자신의 이름을 말하며 짖어요.
}
}
메서드 괄호 안에 있는 `&self`(셀프 - 자기 자신)는 아주 중요해요! 이건 **"이 동작을 하는 바로 그 강아지 자신"**을 가리키는 말이에요. 내 이름을 말하려면 내가 누구인지 알아야 하니까요!
---
이제 우리가 만든 '기술'을 어떻게 사용하는지 볼까요? 마침표(`.`) 하나면 충분합니다!
fn main() {
let my_dog = Dog { name: String::from("초코") }; // '초코'라는 이름을 가진 강아지를 만들어요.
my_dog.bark(); // 마침표(.)를 찍어서 '짖기' 기능을 실행해요!
}
---
1. **impl (구현):** 특정 구조체를 위한 함수들을 모아놓는 공간이에요.
2. **메서드 (Method):** 구조체에 종속되어 특정 데이터가 수행하는 동작이에요.
3. **self (자기 자신):** 메서드를 호출한 그 데이터 객체 자신을 의미해요.
4. **호출:** `변수명.메서드이름()` 형태로 사용해요.
---
**응원의 한 마디!** 처음에는 `impl`이나 `self`라는 단어가 낯설게 느껴질 수 있어요. 하지만 "데이터에게 기술을 가르친다!"라는 개념만 기억하시면 충분합니다.
| 56. 연관 함수와 생성자 (0) | 2026.10.06 |
|---|---|
| 54. 튜플 구조체 활용하기 (0) | 2026.10.06 |
| 53. 필드 초기화 축약법 (0) | 2026.10.01 |
| 52. 구조체 정의와 인스턴스 생성 (0) | 2026.10.01 |
| 51. 구조체란 무엇인가? (0) | 2026.10.01 |