Menu
Coddy logo textTech

Getter

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

private 필드를 사용하면 외부 코드에서 struct의 데이터에 직접 접근할 수 없습니다. 하지만 때로는 다른 사람들이 데이터를 변경할 수 있는 권한은 주지 않고 read할 수 있도록 해야 합니다. 이때 getter methods가 사용됩니다.

getter는 private 필드에 대한 참조를 반환하는 public 메서드입니다.

// wallet.rs
pub struct Wallet {
    balance: f64,
}

impl Wallet {
    pub fn new(initial: f64) -> Wallet {
        Wallet { balance: initial }
    }
    
    pub fn balance(&self) -> f64 {
        self.balance
    }
}

balance() 메서드는 &self(읽기 전용 액세스)를 사용하고 private 필드의 값을 반환합니다. Rust에서는 getter의 이름을 일반적으로 필드 자체의 이름으로 지정하므로 get_ 접두사가 필요하지 않습니다.

이제 외부 코드는 다음 메서드를 통해 잔액을 읽을 수 있습니다:

// main.rs
mod wallet;
use wallet::Wallet;

fn main() {
    let w = Wallet::new(100.0);
    println!("Balance: {}", w.balance());  // 작동합니다!
}

String과 같은 소유된 데이터를 포함하는 필드의 경우, 불필요한 복사를 피하기 위해 참조를 반환하는 경우가 많습니다:

pub fn name(&self) -> &String {
    &self.name
}

getter는 필드 자체를 보호하면서 제어된 읽기 접근을 제공합니다. struct는 자신의 데이터를 계속 관리합니다. 외부 코드는 볼 수는 있지만, 건드릴 수는 없습니다.

challenge icon

챌린지

쉬움

getter 메서드가 private 데이터에 대한 제어된 읽기 접근을 제공하는 방식을 보여 주는 user profile 시스템을 만들어 봅시다.

코드를 구성하기 위해 두 개의 파일을 만듭니다:

  • profile.rs: 두 개의 private fields인 username (String)과 age (u32)를 가진 UserProfile struct를 Define합니다. struct 자체는 public이어야 하지만 fields는 private으로 유지해야 합니다. username과 age를 인수로 받는 public new constructor를 Implement합니다. 그런 다음 두 개의 getter methods를 추가합니다:
    • username: username에 대한 reference(&String)를 반환합니다.
    • age: age 값(u32)을 반환합니다.
  • main.rs: profile module을 가져오고, UserProfile을 생성한 다음 getter methods를 사용하여 사용자의 정보를 print합니다.

Rust에서 getter는 일반적으로 field 자체의 이름을 따서 지정한다는 점을 기억하세요. get_ prefix는 필요하지 않습니다. String fields의 경우 불필요한 복사를 피하기 위해 reference를 반환하세요.

출력은 다음 정확한 형식을 따라야 합니다:

Username: {username}
Age: {age}

예를 들어 username이 "alice"이고 age가 25인 profile을 생성하면 출력은 다음과 같습니다:

Username: alice
Age: 25

두 개의 입력을 받습니다: username과 age입니다.

직접 해보기

mod profile;

use profile::UserProfile;

fn main() {
    let mut input1 = String::new();
    std::io::stdin().read_line(&mut input1).expect("Failed to read line");
    let username = input1.trim().to_string();

    let mut input2 = String::new();
    std::io::stdin().read_line(&mut input2).expect("Failed to read line");
    let age: u32 = input2.trim().parse().expect("Failed to parse age");

    // TODO: 생성자를 사용하여 UserProfile을 생성하세요

    // TODO: getter 메서드를 사용하여 username과 age를 출력하세요
    // 형식:
    // Username: {username}
    // Age: {age}
}
quiz icon실력 점검

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

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

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