Menu
Coddy logo textTech

구현 블록 소개

Coddy Rust 여정의 Object Oriented Programming 섹션에 포함된 레슨 — 61개 중 1번째.

Rust에서 구조체는 타입이 어떤 데이터를 보유하는지를 정의하지만, 그 타입이 무엇을 할 수 있는지는 정의하지 않습니다. 구조체에 동작을 부여하기 위해, impl 키워드와 함께 구현 블록(implementation blocks)을 사용합니다.

구현 블록은 함수(메서드라고 불리는)를 특정 구조체에 연결합니다. 기본 구조는 다음과 같습니다:

struct Dog {
    name: String,
    age: u8,
}

impl Dog {
    fn bark(&self) {
        println!("{} says woof!", self.name);
    }
}

impl Dog 블록은 그 안의 모든 것이 Dog 구조체에 속한다는 것을 Rust에게 알려줍니다. 이러한 분리는 데이터 정의를 깔끔하게 유지하는 동시에, 구현 블록에 필요한 만큼 많은 메서드를 추가할 수 있게 해줍니다.

메서드를 호출하려면 인스턴스에 점 표기법(dot notation)을 사용하세요:

fn main() {
    let my_dog = Dog {
        name: String::from("Rex"),
        age: 3,
    };
    
    my_dog.bark(); // 출력: Rex says woof!
}

데이터(struct)와 동작(impl 블록)을 분리하는 이 패턴은 Rust 코드를 구조화하는 데 필수적입니다. 이어지는 레슨에서는 위 예제에서 보았던 &self 매개변수를 통해 메서드가 struct 데이터에 어떻게 접근하는지 살펴보겠습니다.

challenge icon

챌린지

쉬움

두 개의 필드 name (String)과 lives (u8)를 가진 Cat 구조체를 생성하세요.

Cat에 대한 구현 블록을 추가하고, &self를 매개변수로 받아 고양이의 이름 뒤에 " says meow!"를 출력하는 meow라는 메서드를 작성하세요.

두 개의 입력을 받게 됩니다:

  • 첫 번째 줄: 고양이의 이름 (String)
  • 두 번째 줄: 목숨의 개수 (u8)

제공된 값으로 Cat 인스턴스를 생성하고 meow 메서드를 호출하세요.

예상 출력 형식:

{name} says meow!

치트 시트

구현 블록은 impl 키워드를 사용하여 메서드를 구조체에 연결합니다:

struct Dog {
    name: String,
    age: u8,
}

impl Dog {
    fn bark(&self) {
        println!("{} says woof!", self.name);
    }
}

impl 블록은 데이터 정의(구조체)와 동작(메서드)을 분리합니다. 메서드는 점 표기법을 사용하여 호출됩니다:

let my_dog = Dog {
    name: String::from("Rex"),
    age: 3,
};

my_dog.bark(); // 출력: Rex says woof!

메서드는 &self 매개변수를 사용하여 구조체 데이터에 접근합니다.

직접 해보기

use std::io;

// TODO: 'name' (String)과 'lives' (u8) 필드를 가진 Cat 구조체를 정의하세요


// TODO: 'meow' 메서드를 포함하는 Cat의 구현 블록을 추가하세요


fn main() {
    let mut name = String::new();
    io::stdin().read_line(&mut name).expect("Failed to read line");
    let name = name.trim().to_string();
    
    let mut lives_input = String::new();
    io::stdin().read_line(&mut lives_input).expect("Failed to read line");
    let lives: u8 = lives_input.trim().parse().expect("Failed to parse lives");
    
    // TODO: Cat 인스턴스를 생성하고 meow 메서드를 호출하세요
    
}
quiz icon실력 점검

이 레슨에는 짧은 퀴즈가 포함되어 있습니다. 레슨을 시작해 문제를 풀고 진행 상황을 기록하세요.

Object Oriented Programming의 모든 레슨