2025년 5월 1일 목요일

7-1-3강 객체 지향(다형성)

러스트는 트레이 객체를 사용해 다형성을 제공한다.

하나의 함수가 다양한 타입을 받아 공통 동작을 할 수 있게 해준다.

// trait 정의
trait Hello {
    fn hello_msg(&self) -> String;
}

// 구조체 정의
struct Student {
    name: String,
}

//trait은 "impl 트레잇 이름 for 구조체 이름" 형식으로 정의 한다.
// Hello 트레잇을 Student 구조체에 구현
impl Hello for Student {
    fn hello_msg(&self) -> String {
        String::from("안녕하세요! 선생님,")
    }
}

// 구조체 정의
struct Teacher {
    name: String,
}

// Hello 트레잇을 Teacher 구조체에 구현
impl Hello for Teacher {
    fn hello_msg(&self) -> String {
        String::from("안녕하세요. 오늘 수업은...")
    }
}

// 다형성을 사용하기 위해서는 trait 객체를 사용해야 한다.
// trait 객체는 "&dyn 트레잇 이름" 형식으로 정의한다.
fn say_hello(say: &dyn Hello) {
    println!("{}", say.hello_msg());
}

fn main() {
    let student = Student { name: String::from("luna") };
    let teacher = Teacher { name: String::from("me") };

    say_hello(&student); // Student 구조체의 hello_msg 메서드 호출
    say_hello(&teacher); // Teacher 구조체의 hello_msg 메서드 호출
}

/*실행결과
안녕하세요! 선생님,
안녕하세요. 오늘 수업은...
*/

댓글 없음:

댓글 쓰기