요약 - Smart Pointer Mock
Coddy Rust 여정의 Object Oriented Programming 섹션에 포함된 레슨 — 61개 중 58번째.
챌린지
쉬움Rust의 실제 스마트 포인터가 내부적으로 어떻게 작동하는지 보여주는 SmartBox라는 스마트 포인터 모형을 만들어 봅시다! 여러분이 만들 래퍼(wrapper)는 제네릭이며, 내부 값에 대한 접근을 제공하고, 정리될 때 자동으로 알림을 표시합니다.
코드는 두 개의 파일로 구성됩니다:
smart_box.rs:T타입의 단일 필드value를 가진 공개 제네릭 구조체SmartBox<T>를 정의합니다. SmartBox를 생성하고 생성 메시지를 출력하는new연관 함수를 구현하세요. 내부 값에 대한 참조를 반환하는get메서드를 추가하세요. 마지막으로, SmartBox가 스코프를 벗어날 때 정리 메시지를 출력하도록Drop트레이트를 구현하세요.main.rs: smart_box 모듈을 가져와서 두 가지 다른 타입으로 SmartBox를 시연하세요. 숫자(입력값)를 담는SmartBox<i32>와 텍스트(입력값)를 담는SmartBox<String>를 생성하세요.get메서드를 사용하여 값을 출력하세요. Drop 메시지는 main 함수가 끝날 때 박스들이 스코프를 벗어나면서 자동으로 나타납니다.
SmartBox가 생성될 때, 다음을 출력해야 합니다:
SmartBox created값에 접근할 때는 다음 형식으로 출력하세요:
Value: {value}SmartBox가 드롭(dropped)될 때, 다음을 출력해야 합니다:
SmartBox dropped예를 들어, 입력값이 42와 Hello인 경우:
SmartBox created
SmartBox created
Value: 42
Value: Hello
SmartBox dropped
SmartBox dropped두 박스가 먼저 생성되고, 그 다음 값에 접근하며, 마지막으로 main이 끝날 때 생성된 역순(나중에 생성된 것이 먼저 드롭됨)으로 두 박스가 모두 드롭되는 방식에 주목하세요.
두 개의 입력을 받습니다: 정수 값(i32로 파싱)과 문자열 값입니다.
직접 해보기
mod smart_box;
use smart_box::SmartBox;
fn main() {
// 입력 읽기
let mut input1 = String::new();
std::io::stdin().read_line(&mut input1).expect("Failed to read line");
let number: i32 = input1.trim().parse().expect("Failed to parse number");
let mut input2 = String::new();
std::io::stdin().read_line(&mut input2).expect("Failed to read line");
let text = input2.trim().to_string();
// TODO: 숫자를 담는 SmartBox<i32> 생성
// TODO: 텍스트를 담는 SmartBox<String> 생성
// TODO: get 메서드를 사용하여 값 출력
// 형식: "Value: {value}"
// main 함수가 종료될 때 Drop 메시지가 자동으로 나타납니다.
}