트랙
/
Cairo
Cairo
/
연습 문제
/
건강 통계
건강 통계

건강 통계

학습 연습 문제

소개

여러 항목을 하나로 묶어서, 그 묶음 자체를 하나의 단위로 다루면 편리할 때가 많아요. Cairo에서는 이런 묶음을 구조체라고 부르고, 묶음 안의 각 항목을 구조체의 필드라고 해요. 구조체는 사용할 수 있는 필드의 일반적인 집합을 정의하고, 구조체의 특정한 예시 하나를 인스턴스라고 불러요.

게다가 구조체에는 메서드를 정의할 수 있고, 그 메서드는 필드에 접근할 수 있어요. 이때 구조체 자신을 self라고 불러요. 메서드가 ref self: SomeStruct를 사용하면 필드를 바꿀 수 있어요. 즉 가변 상태가 돼요. 반면 메서드가 self: SomeStruct나 self: @SomeStruct를 사용하면 필드를 바꿀 수 없어요. 불변이기 때문이에요. 이렇게 가변성을 제어하면 빌림 검사기가 특정 부류의 동시성 Bug가 Cairo에서는 아예 발생하지 않도록 보장하는 데 도움이 돼요.

이 연습 문제에서는 구조체에 두 종류의 메서드를 구현하게 돼요. 첫 번째는 흔히 게터라고 불러요. 게터는 구조체의 필드를 외부에 드러내지만, 다른 누구도 그 값을 변경하지는 못하게 해요.

또 다른 종류의 메서드도 구현하게 되는데, 흔히 세터라고 불러요. 세터는 필드의 값을 바꿔요. 세터는 Cairo에서 그렇게 흔하지는 않아요. 필드를 자유롭게 수정할 수 있다면 그냥 공개로 만드는 편이 더 흔하죠. 그래도 필드를 업데이트할 때 부수 효과가 따라야 한다면 세터가 유용해요.

구조체는 struct 키워드를 사용해 정의하고, 그 뒤에 구조체가 설명하는 타입의 이름을 대문자로 시작해서 써요.

struct Item {}

그런 다음 추가 타입들을 구조체 본문에 구조체의 _필드_로 넣고, 각 필드에 각자의 타입을 붙여요.

struct Item {
    name: String,
    weight: f32,
    worth: u32,
}

트레이트는 타입이 구현할 수 있는 메서드 집합을 정의해요 (여기서는 구조체에 집중하지만, 트레이트는 열거형에도 구현할 수 있어요). 이 트레이트가 구현되면 그 타입의 인스턴스에서 이 메서드들을 호출할 수 있어요. 트레이트는 trait 키워드로 정의하고, 트레이트 안에서 우리 타입이 구현하기를 원하는 메서드 시그니처를 정의해요.

trait ImplTrait {
    // Define the method signature
    fn new() -> Item;
}

마지막으로, 정의한 트레이트를 구현하는 impl 블록 안에서 구조체에 메서드를 정의할 수 있어요.

impl ItemImpl of ImplTrait {
    // initializes and returns a new instance of our Item struct
    fn new() -> Item {
        Item {}
    }
}

지침

건강 모니터링 시스템을 구현하는 작업을 하고 있어요. 그 일환으로, 사용자의 건강 통계를 추적해야 해요.

impl 블록에 스텁(stub)으로 만들어 둔 몇 가지 함수와, 다음과 같은 구조체 정의에서 시작해요.

pub struct User {
    name: String,
    age: u32,
    weight: u32,
}

목표는 impl 블록에 정의된 User struct의 스텁 메서드들을 구현하는 거예요.

예를 들어, new 메서드는 지정된 이름, 나이, 몸무게 값을 가진 User 구조체의 인스턴스를 반환해야 해요.

let mut bob = User::new("Bob", 32, 72);
// Returns: a User with name "Bob", age 32, and weight 72

weight 메서드는 User의 몸무게를 반환해야 해요.

bob.weight();
// Returns: 72

set_age 메서드는 User의 나이를 설정해야 해요.

bob.set_age(33);
// Updates Bob's age to 33; happy birthday Bob!

재미있게 해봐요!

GitHub에서 편집 링크가 새 창이나 탭에서 열려요
Cairo Exercism

건강 통계 문제를 시작해 볼 준비가 됐나요?

Exercism에 가입하고 Cairo 트랙을 개념 25개연습 문제 68개, 그리고 실제 사람의 멘토링과 함께 배우고 익혀 보세요. 모두 무료예요.