반응형
Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | ||||||
2 | 3 | 4 | 5 | 6 | 7 | 8 |
9 | 10 | 11 | 12 | 13 | 14 | 15 |
16 | 17 | 18 | 19 | 20 | 21 | 22 |
23 | 24 | 25 | 26 | 27 | 28 |
Tags
- 애플 달팽이
- 주말농장
- RSA
- MSA
- 구피
- did
- PKI
- Python 강좌
- 기본문법
- 체리새우
- 쌈채소
- Tendermint
- for
- MSSQL
- 반복문
- 텐더민트
- 물생활
- 무화과
- 치비
- 분산 식별자
- golang 강좌
- 가재
- 카디날
- 분산 신원
- rust 소개
- Feign
- rust 강좌
- 조건문
- rust
- Config server
Archives
- Today
- Total
comnic's Dev&Life
[Rust] 9. 생성자와 소멸자, RAII 개념 본문
반응형
9. 생성자와 소멸자, RAII(Resource Acquisition Is Initialization) 개념
9.1 생성자와 소멸자 메소드 정의
생성자(new 메소드): Rust에서는 impl 블록 내에서 new라는 이름을 가진 함수를 통해 생성자 역할을 수행합니다. 이 함수는 보통 새로운 객체를 생성하고 초기화하는 데 사용됩니다.
struct MyResource {
data: String,
}
impl MyResource {
fn new(initial_data: &str) -> MyResource {
println!("리소스 생성");
MyResource {
data: String::from(initial_data),
}
}
}
- MyResource 구조체에는 data라는 필드가 있습니다.
- impl 블록 내부에서 new 메소드는 MyResource 구조체의 새로운 인스턴스를 생성하고 초기화합니다.
- 생성자에서는 필요한 초기화 로직을 수행합니다.
소멸자(drop 메소드): Rust에서는 Drop 트레이트를 구현하여 소멸자 역할을 수행합니다. Drop 트레이트에 정의된 drop 메소드는 해당 객체가 범위를 벗어나면 자동으로 호출됩니다.
impl Drop for MyResource {
fn drop(&mut self) {
println!("리소스 제거: {}", self.data);
}
}
9.2 RAII (Resource Acquisition Is Initialization) 개념
RAII는 리소스 획득이 초기화와 동일하다는 원칙을 기반으로 하는 디자인 패턴입니다. Rust에서는 Drop 트레이트를 이용하여 RAII를 구현합니다.
struct FileResource {
file_name: String,
}
impl FileResource {
fn open(file_name: &str) -> FileResource {
println!("파일 열기: {}", file_name);
FileResource {
file_name: String::from(file_name),
}
}
}
impl Drop for FileResource {
fn drop(&mut self) {
println!("파일 닫기: {}", self.file_name);
}
}
- FileResource 구조체는 파일 이름을 나타내는 file_name 필드를 가집니다.
- open 메소드를 통해 파일을 열고, Drop 트레이트를 구현하여 파일을 닫는 소멸자를 정의합니다.
- 이 구현은 리소스 획득이 객체의 초기화와 동일하게 이루어져, 리소스 누수를 방지하고 안전성을 유지합니다.
9.3 간단한 예제
fn main() {
// 생성자 호출
let resource = MyResource::new("Hello, Rust!");
// resource를 사용하는 로직
// ...
// 범위를 벗어날 때 소멸자 호출
}
- main 함수에서 MyResource의 생성자인 new 메소드를 호출하여 resource라는 객체를 생성합니다.
- resource 객체를 사용하는 로직이 있는 부분입니다.
- resource의 범위를 벗어나면 소멸자 drop이 자동으로 호출됩니다. Rust의 소멸자 호출은 스코프를 떠날 때 자동으로 이루어지므로 메모리 누수를 방지할 수 있습니다.
반응형
'Rust' 카테고리의 다른 글
[Rust] 11. 병행성(Concurrency)과 동시성(Parallelism) (0) | 2023.12.09 |
---|---|
[Rust] 10. 제네릭(Generic Data Types) 프로그래밍 (0) | 2023.12.09 |
[Rust] 8. 패턴 매칭(Match)과 매치 구조체(Match Struct) (2) | 2023.12.06 |
[Rust] 7. 소유권과 대여 (1) | 2023.12.05 |
[Rust] 6. 구조체와 열거형 (1) | 2023.12.05 |
Comments