Menu
Coddy logo textTech

요약 - Smart Pointer Mock

Coddy Rust 여정의 Object Oriented Programming 섹션에 포함된 레슨 — 61개 중 58번째.

challenge icon

챌린지

쉬움

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

예를 들어, 입력값이 42Hello인 경우:

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 메시지가 자동으로 나타납니다.
}

Object Oriented Programming의 모든 레슨