[Rust/러스트] 구조체의 메소드, 연관함수

2022. 2. 17. 18:01Programming Language/Rust

반응형

■ 구조체의 메소드

구조체의 메소드는 구조체의 impl 블록에서 정의해야 하며 메소드의 첫번째 파라미터는 self가 됩니다. 추가적으로 impl의 명은 구조체의 명과 동일해야 하며, 첫번째 파라미터 self는 메소드를 호출하는 인스턴스를 가르킵니다.

struct Person{
    name : String,
    age : u32,
    address : String,
    email : String,
}

// 구조체 구현
impl Person{
    // 메소드 정의
    fn show_person(&self) {
        println!("Name : {}", self.name);
        println!("Age : {}", self.age);
        println!("Address : {}", self.address);
        println!("Email : {}", self.email);
    }
}

fn main(){
    // 인스턴스 생성
    let person = Person{
        name : String::from("Hyunmin han"),
        age : 29,
        address : String::from("서울시 강남구 역삼동"),
        email : String::from("hyunmin@gmail.com"),
    };
    
    // show_person 메소드 호출
    person.show_person();
}

▶ 출력 결과

Name : Hyunmin han
Age : 29
Address : 서울시 강남구 역삼동
Email : hyunmin@gmail.com

■ 구조체의 연관함수

구조체의 연관 함수는 메소드와 다르게 self 파라미터를 갖지 않는 함수이며 구조체::연관함수 문법을 사용하여 호출합니다.

struct Person{
    name : String,
    age : u32,
    address : String,
    email : String,
}

// 구조체 구현
impl Person{
    // 연관 함수 정의
    fn new_person(name : String, age : u32, address : String, email : String) -> Person{
        Person{
            name,
            age,
            address,
            email,
        }
    }
}

fn main(){
    // 연관 함수를 통해 새로운 인스턴스 생성
    let person = Person::new_person(
        String::from("Hyunmin han"),
        29,
        String::from("서울시 강남구 역삼동"),
        String::from("hyunmin@gmail.com"),
    );

    println!("Name : {}", person.name);
    println!("Age : {}", person.age);
    println!("Address : {}", person.address);
    println!("Email : {}", person.email);
}

▶ 출력 결과

Name : Hyunmin han
Age : 29
Address : 서울시 강남구 역삼동
Email : hyunmin@gmail.com
반응형