Menu
Coddy logo textTech

Self 매개변수

Coddy Rust 여정의 객체 지향 프로그래밍 섹션에 포함된 레슨. 61개 중 2번째.

메서드가 구조체 instance에 저장된 데이터에 액세스해야 할 때는 &self 매개변수를 사용합니다. 이 특수 매개변수는 메서드에서 항상 첫 번째 인수이며, 메서드가 호출된 instance에 대한 참조를 나타냅니다.

& 기호는 instance의 소유권을 가져오는 대신 이를 빌린다는 의미입니다. 이를 통해 메서드는 instance를 소비하지 않고 struct의 필드를 읽을 수 있습니다:

struct Rectangle {
    width: u32,
    height: u32,
}

impl Rectangle {
    fn area(&self) -> u32 {
        self.width * self.height
    }
    
    fn is_square(&self) -> bool {
        self.width == self.height
    }
}

메서드 본문에서 self를 사용하면 점 표기법으로 구조체의 모든 필드에 접근할 수 있습니다. area 메서드는 widthheight를 모두 읽어 결과를 계산하고 반환합니다.

&self는 인스턴스를 빌리기만 하므로, 동일한 struct에서 여러 methods를 문제없이 호출할 수 있습니다:

fn main() {
    let rect = Rectangle { width: 10, height: 5 };
    
    println!("Area: {}", rect.area());      // 50
    println!("Square? {}", rect.is_square()); // false
}

&self를 사용하는 메서드는 읽기 전용입니다. 이러한 메서드는 struct의 데이터를 확인할 수 있지만 변경할 수는 없습니다. 다음 레슨에서는 instance를 수정할 수 있는 메서드를 만드는 방법을 배웁니다.

challenge icon

챌린지

쉬움

단일 필드인 Circle 구조체를 만드세요: radius(f64).

Circle에 대해 &self를 사용하는 두 개의 메서드가 있는 구현 블록을 추가하세요:

  • circumference: 원주를 f64로 반환합니다(공식: 2.0 * 3.14159 * radius).
  • diameter: 지름을 f64로 반환합니다(공식: 2.0 * radius).

입력 하나가 주어집니다:

  • 원의 반지름(f64)

주어진 반지름으로 Circle 인스턴스를 만든 다음, 원주와 지름을 각각 별도의 줄에 출력하세요.

예상 출력 형식:

{circumference}
{diameter}

직접 해보기

use std::io;

// TODO: 여기에 Circle 구조체를 정의하세요


// TODO: circumference와 diameter 메서드가 있는 Circle의 구현 블록을 추가하세요


fn main() {
    let mut input = String::new();
    io::stdin().read_line(&mut input).expect("Failed to read line");
    let radius: f64 = input.trim().parse().expect("Invalid number");
    
    // TODO: Circle 인스턴스를 생성하고 circumference와 diameter를 출력하세요
    
}
quiz icon실력 점검

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

객체 지향 프로그래밍의 모든 레슨

직접 연습해 보세요: 온라인 Rust 컴파일러