메서드 문법 (Rust Method Syntax)
- 구조체 (혹은 열거형 혹은 트레이) 에 종속된 함수를 말한다.
- 구조체의 내용 안에 정의된다.
- 첫번째 파라미터는 언제나
&self
이다. - 첫번째 파라미터가
&self
가 아닌 경우엔, 연관 함수가 된다.
메서드 정의하기
#[derive(Debug)]
struct Rectangle {
length: u32,
width: u32,
}
impl Rectangle {
fn area(&self) -> u32 {
self.length * self.width
}
}
fn main() {
let rect1 = Rectangle { length: 50, width: 30 };
println!(
"The area of the rectangle is {} square pixels.",
rect1.area()
);
}
위 코드의 문맥은 이 포스팅 을 읽고 오면 이해가 더 쉽다.
impl 구조체명 { 블럭 }
에 메서드를 정의하면 된다.- 메서드는 일반 함수와 같이
fn
으로 시작한다. - 처음 파라미터는
&self
로 시작해야 한다.self
가 아닌 점에 유의하자. 소유권을 옮기는 것이 아니다.
첫 파라미터가
&self
가 아닌self
여도 문법상 문제는 없지만, 소유권을 반환하는 경우는 인스턴스 변환 후 인스턴스 사용을 막고 싶을 때만 종종 쓴다.
연관 함수 작성해보기
#[derive(Debug)]
struct Rectangle {
length: u32,
width: u32,
}
impl Rectangle {
fn area(&self) -> u32 {
self.length * self.width
}
fn can_hold(&self, another: &Rectangle) -> bool {
self.length >= another.length && self.width >= another.width
}
fn build(length: u32, width: u32) -> Rectangle {
Rectangle { length, width }
}
}
fn main() {
let rect1 = Rectangle::build(50, 30);
let rect2 = Rectangle::build(40, 10);
let rect3 = Rectangle::build(60, 20);
}
biuld()
메서드는&self
를 반환하지 않는다.- 이를 연관 함수라 한다.
self
를 이용하지 않기 때문에Rectangle::build()
와 같은 형식으로 이용할 수 있다.- Java 언어에서 정적 메서드와 비슷한 역할을 한다.
정리
- 메서드를 이용하여 구조체 영역에서 자주 이용하는 연산에 의미있는 이름을 붙여줄 수 있다.
반응형
'러스트 (Rust)' 카테고리의 다른 글
러스트 (Rust) 열거형 2 - match 키워드 (0) | 2022.12.03 |
---|---|
러스트 (Rust) 열거형 1 - 기본 문법 (1) | 2022.12.03 |
러스트 (Rust) 구조체를 이용한 리팩토링 연습 (0) | 2022.11.03 |
러스트 (Rust) 구조체 정의하고 생성하는 방법 (0) | 2022.11.03 |
러스트 (Rust) 의 슬라이스 (Slice) 개념 (0) | 2022.11.02 |