[Rust]

[Rust] 구조체 - 메서드

극꼼 2023. 7. 30. 01:47
반응형


<메서드(method)>

메서드(method)는 함수와 유사하지만, 구조체의 내용 안에 정의되어야 합니다.

  • 메서드의 첫번째 매개변수는 항상 self여야 하며, 메서드가 호출되는 구조체의 인스턴스를 나타냅니다. 따라서 타입을 정의하지 않아도 됩니다. 구조체의 소유권을 가져오지 않고 싶다면 &self를 사용해줍니다.
  • self는 예약어로, 다른 이름을 매개변수에 입력할 경우 타입이 없다는 에러를 출력합니다.
  • impl 블록에서 정의해야 합니다.
#[derive(Debug)]
struct Rectangle {
    length : u32,
    width: u32
}

impl Rectangle {
    fn area(&self) -> u32 {
        self.length * self.width
    }
}

fn struct2() {
    let rect1 = Rectangle { length: 50, width: 50};
    println!{"{}", rect1.area()}; // 2500 출력
}

<연관 함수(associated functions)>

impl 블록의 또다른 기능은 self 파라미터를 갖지 않는 연관 함수도 정의할 수 있다는 것입니다. 다음은 정사각형 Rectangle을 생성해 리턴하는 메서드입니다.

impl Rectangle {
    fn square(size: u32) -> Rectangle {
        Rectangle { length: size, width: size }
    }
}

 

연관 함수를 사용할 때는 :: 문법을 사용해야 합니다.

let sq = Rectangle::square(30);
println!{"{:?}", sq}; // Rectangle { length: 30, width: 30 } 출력

:: 는 연관함수 외에도 모듈에서도 사용됩니다.


요약 글 : https://rinthel.github.io/rust-lang-book-ko/ch05-03-method-syntax.html

반응형