반응형
<메서드(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
반응형
'[Rust]' 카테고리의 다른 글
[Rust] 패키지, 크레이트, 모듈로 프로젝트 관리 (0) | 2023.08.11 |
---|---|
[Rust] 열거형(enum) (0) | 2023.08.01 |
[Rust] 데이터 구조체 (0) | 2023.07.29 |
[Rust] 슬라이스(slices) (0) | 2023.07.27 |
[Rust] 참조자(References)와 빌림(Borrowing) (0) | 2023.07.26 |