Rust 기본 : 구조체 (Struct) Implementation blocks
구현 블록 (Implementation blocks)
구현 블록은 주어진 유형에 대한 기능을 구현합니다.
주어진 유형에는 struct, enum, trait 이렇게 세가지가 있습니다.
그리고 주어진 유형에 대해,
- 메서드(method) : 인스턴스 함수.
- 연관 함수(associated function) : 인스턴스 없이 호출, C++의 정적 메서드 역할.
- 특성 구현(trait implementation) : 특성(trait)을 통해 정의된 인터페이스를 실제 타입에서 구현.
여기서는 구조체에 대한 메서드와 연관 함수에 구현을 설명합니다.
메소드(method)
- 첫번째 함수 인자를 self, &self, &mut self로 사용하면 메소드가 된다.
- self를 사용할 경우 함수 호출이 끝나면 인스턴스가 삭제되어 다시 사용할 수 없다.
struct Student {
first_name: String,
last_name: String,
roll_no: u16, // 학생 등록 번호
}
impl Student {
fn get_name(&self) -> String { // 구조체 데이터 읽기
format!("{} {}", self.first_name, self.last_name)
}
fn set_roll_no(&mut self, new_roll_no: u16) { // 구조체 데이터 수정
self.roll_no = new_roll_no;
}
fn convert_to_string(&self) -> String { // 새 데이터 리턴 (should take ownership)
format!(
"Name: {} {}, Roll no: {}",
self.first_name, self.last_name, self.roll_no
)
}
fn destroy(self) {}
}
fn main() {
// 직접 구조체 생성
let mut student = Student {
first_name: "Harry".to_string(),
last_name: "Potter".to_string(),
roll_no: 42,
};
println!("Student is: {}", student.get_name());
student.set_roll_no(50);
let student_details = student.convert_to_string();
println!("{student_details}");
student.destroy(); // 명시적 인스턴스 삭제
}
연관 함수 만들기 (static function)
struct ShopItem {
name: String,
quantity: u32,
}
impl ShopItem {
fn new(name: String, quantity: u32) -> ShopItem {
ShopItem { name, quantity }
}
fn in_stock(&self) -> bool {
self.quantity > 0
}
}
fn main() {
// 직접 구조체를 생성하는 것 보다는 new 함수를 구현하는 게 더 가독성이 좋다.
let item = ShopItem::new("Pants".to_string(), 450);
if item.in_stock() {
println!("{} remaining: {}", item.name, item.quantity);
} else {
println!("{} not in stock", item.name);
}
}
'개발 > 러스트 (Rust)' 카테고리의 다른 글
Rust 기본, 옵션 열거형 (Option enum) (0) | 2024.08.17 |
---|---|
Rust 기본, 패턴 매칭 표현식 (Match expression) (0) | 2024.08.13 |
Rust 기본, 열거형 (Enumerations) (0) | 2024.08.10 |
Rust 기본, 구조체 (Struct) Tuple structs (0) | 2024.08.06 |
Rust 기본, 구조체 (Struct) (0) | 2024.07.24 |
Rust 기본, to_string() vs to_owned() (0) | 2024.07.20 |
Rust 기본 : UTF-8 문자열 (Strings) (0) | 2024.07.17 |
Rust 기본, 슬라이스 (Slice) (0) | 2024.07.14 |