Todo
부호없는 정수인 price와 quantity 필드를 보유한 Order라는 이름의 struct를 정의하세요.
is_available이라는 메서드가 있어야 하며, quantity가 0보다 크면 true를, 작으면 false를 반환합니다.
Struct
풀이:
struct Order {
price: u32,
quantity: u32,
}
impl Order {
fn is_available(self) -> bool {
if(self.quantity > 0) {
true
} else {
false
}
}
}
러스트의 구조체는 다른 언어에서의 구조체와 유사하다.
서로 다른 타입의 필드를 구조체를 통해 묶을 수 있다.
구조체를 정의할 때는 <필드명>: <타입>
순으로 작성하고, 여러 필드를 작성한다면 콤마(,)로 이어가면 된다.
마지막 필드 다음에도 콤마를 붙이는 경우가 있다. 이는 필드가 추가되는 상황에 유지보수가 편리하도록 하는 관습이다.
러스트의 구조체는 다른 언어의 객체처럼 메서드를 작성할 수 있다.
메서드를 작성할 때는 impl <구조체명>
으로 시작한다. '이런 이름의 구조체에 대한 메서드를 구현(implement)할 거에요'라는 의미다.
impl
블록 안에서 원하는 메서드를 함수 형태로 작성하면 된다.
보통 new()
와 같은 생성자가 필요하겠지만 문제에서는 요구하지 않았다.
메서드는 해당 메서드가 사용될 구조체의 필드를 이용할 수 있다. 실제로 생성된 구조체 인스턴스를 의미하는 self
를 매개변수로 설정하고, 함수 내부에서 사용할 수 있다.
보통은 &self
의 형태로 소유권을 빌려오는데, 문제 순서상 아직 소유권에 대해서 학습하지 않았고,
소유권을 가져와도 테스트에만 사용되어 문제는 없으므로 self
로 작성했다.
정식 solution에서는 &self
를 사용하고 있다.