연관 함수
Coddy Rust 여정의 객체 지향 프로그래밍 섹션에 포함된 레슨. 61개 중 4번째.
impl 블록의 모든 function이 기존 인스턴스에서 작동해야 하는 것은 아닙니다. 매개변수로 self를 take하지 않는 function을 associated functions라고 합니다. 이러한 function은 특정 인스턴스가 아니라 type 자체와 associated되어 있습니다.
associated 함수의 가장 일반적인 용도는 생성자를 create하는 것입니다. 관례상 이러한 함수는 흔히 new라는 이름을 사용합니다.
struct Player {
name: String,
score: u32,
}
impl Player {
fn new(name: String) -> Player {
Player {
name,
score: 0,
}
}
}
self 매개변수가 없다는 점에 주목하세요. 이 function은 작동하기 위해 기존 Player가 필요하지 않습니다. 대신 완전히 새로운 것을 create하고 반환합니다. 반환 타입은 struct 자체입니다.
associated function을 호출하려면 점 표기법 대신 type name과 함께 :: 구문을 사용하세요:
fn main() {
let player1 = Player::new(String::from("Alice"));
println!("{} starts with {} points", player1.name, player1.score);
// 출력: Alice는 0점으로 시작합니다
}
이 패턴은 기본값 또는 검증 로직으로 구조체를 초기화하는 깔끔한 방법을 제공하며, 생성 로직을 타입 정의와 함께 묶어 둡니다. 이미 String::from()에서 이 문법을 본 적이 있을 것입니다. 이것도 associated function입니다!
챌린지
쉬움Book struct에 두 개의 필드를 만드세요: title (String) 및 pages (u32).
Book에 대한 impl block을 추가하고, 다음과 같은 associated function new를 만드세요.
title: String매개변수를 takes- 주어진 title과
pages가0으로 설정된 새로운Book을 returns
또한 &self를 takes하고 다음 format의 String을 returns하는 info method를 추가하세요: "{title} has {pages} pages"
하나의 input을 받습니다:
- book의 title (String)
Book::new associated function을 사용하여 provided title로 book을 create한 다음, info method를 calling한 result를 Print하세요.
Expected Output format:
{title} has {pages} pages직접 해보기
use std::io;
// TODO: title (String)과 pages (u32) 필드를 가진 Book 구조체를 정의하세요
// TODO: Book에 대한 impl 블록을 추가하세요:
// - title을 받아 pages를 0으로 설정한 Book을 반환하는 연관 함수 `new`
// - "{title} has {pages} pages" 형식의 String을 반환하는 메서드 `info`
fn main() {
let mut input = String::new();
io::stdin().read_line(&mut input).expect("Failed to read line");
let title = input.trim().to_string();
// TODO: Book::new를 사용하여 제공된 title로 book을 생성하세요
// TODO: info 메서드를 호출한 결과를 출력하세요
}이 레슨에는 짧은 퀴즈가 포함되어 있습니다. 레슨을 시작해 문제를 풀고 진행 상황을 기록하세요.
객체 지향 프로그래밍의 모든 레슨
직접 연습해 보세요: 온라인 Rust 컴파일러