English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية
오브젝트 지향 프로그래밍 언어는 일반적으로 데이터의 포장과 상속을 구현하고, 데이터를 기반으로 메서드를 호출할 수 있습니다.
Rust는 오브젝트 지향 프로그래밍 언어가 아니지만, 이러한 기능들은 모두 구현될 수 있습니다.
포장은 외부에 표시되는 전략이며, Rust에서는 모듈의 메커니즘을 통해 가장 외부의 포장을 구현할 수 있으며, 각 Rust 파일은 모듈로 간주될 수 있으며, 모듈 내 요소는 pub 키워드를 사용하여 외부에 명시할 수 있습니다. 이는 "조직 관리" 장에서 자세히 설명되었습니다.
"클래스"는 대체로 오브젝트 지향 프로그래밍 언어에서 자주 사용되는 개념입니다. "클래스"는 데이터를 포장하고, 동일한 데이터 실체와 그 처리 메서드를 추상화합니다. Rust에서는 구조체나 열거형 클래스를 사용하여 클래스 기능을 구현할 수 있습니다:
pub struct ClassName {}} pub field: Type, } pub impl ClassName { fn some_method(&self) { // 메서드 함수 본문 } } pub enum EnumName { A, B, } pub impl EnumName { fn some_method(&self) { } }
아래에서 완전한 클래스를 만들어 보겠습니다:
second.rs pub struct ClassName {}} 필드: i32, } impl ClassName { pub fn new(value: i32) -> ClassName { ClassName { 필드: 값 } } pub fn public_method(&self) { println!("public 메서드에서"); self.private_method(); } fn private_method(&self) { println!("private 메서드에서"); } } main.rs mod second; use second::ClassName; fn main() { let object = ClassName::new(1024); object.public_method(); }
출력 결과:
public 메서드에서 private 메서드에서
다른 대부분의 대상 지향 프로그래밍 언어는 "상속"을 구현할 수 있으며, 이를 "extend"이라는 단어로 설명합니다.
상속은 다중 형태(Polymorphism) 아이디어의 구현입니다. 다중 형태는 프로그래밍 언어가 여러 타입의 데이터를 처리할 수 있는 코드라는 것을 의미합니다. Rust에서는 트레이트(trait)를 통해 다중 형태를 구현합니다. 트레이트에 대한 자세한 내용은 "트레이트" 섹션에서 제공됩니다. 그러나 트레이트는 속성의 상속을 구현할 수 없으며, "인터페이스"와 유사한 기능만 구현할 수 있습니다. 따라서 클래스를 상속받고자 하는 경우 "자식 클래스"에서 "부모 클래스"의 예제를 정의하는 것이 좋습니다.
결론적으로, Rust는 상속과 관련된 문법을 제공하지 않으며, 공식적인 상속 수단도 없습니다(완전히 Java의 클래스 상속과 동일합니다). 그러나 유연한 문법은 관련 기능을 구현할 수 있습니다.