100 Exercises To Learn Rust - 3.1 Structs 풀기

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를 사용하고 있다.