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 메서드는 width와 height를 모두 읽어 결과를 계산하고 반환합니다.
&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를 수정할 수 있는 메서드를 만드는 방법을 배웁니다.
챌린지
쉬움단일 필드인 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를 출력하세요
}이 레슨에는 짧은 퀴즈가 포함되어 있습니다. 레슨을 시작해 문제를 풀고 진행 상황을 기록하세요.
객체 지향 프로그래밍의 모든 레슨
직접 연습해 보세요: 온라인 Rust 컴파일러