아래 소스를 기준으로 Rust에서 Method와 Function의 차이를 설명한다.

struct Person {
    name: String,
}

impl Person {
    fn new(name: String) -> Self {
        Self {
            name
        }
    }

    fn set_name(&mut self, name: String) {
        self.name = name;
    }

    fn get_name(&self) -> String {
        self.name.clone()
    }
}

fn main() {
    let jihoon = Person::new("jihoon".to_string());

    println!("Hello, {}!", jihoon.get_name());
}

 

Method

특정 impl 안에 존재하며, &self나 &mut self와 같은 키워드가 붙었을 경우 Method로 불리운다.

위 소스를 기준으로 Person 구조체의 set_name()과 get_name()이 그 예이다.

즉, 특정 구조체에 대한 특정한 동작을 수행할 때 Method를 사용할 수 있다.

 

Function

특정 impl안에 존재할 수도 있고 존재하지 않을 수 있다.

Method와 다르게 &self나 &mut self와 같은 키워드가 붙지 않는다.

위 소스를 기준으로 Person 구조체의 new()가 그 예이다.

즉, 특정 구조체와 상관없이 Static하게 호출 할 수 있을 때 Function이라고 할 수 있다.

 

Key Point

Rust에서 Callable이 필요할 때 fn() 이라는 타입을 많이 사용한다.

이 타입은 Function을 나타낸다.

 

즉, Callback과 같이 특정한 이벤트 시 각기 다른 함수를 호출하고 싶을 때 Function 타입으로만 호출할 수 있다는 것이다.

필자가 Callback을 구현해야 하는데 Method로 밖에 선언이 되어 있질 않아서 구조를 뒤짚는데 좀 애를먹어서 이렇게 정리한다..

 

Rust에서 Callable을 Function이 아닌 Method로 호출할 수 있는 방법도 있을텐데 일단은 이렇게까지만 정리한다..

(없나..? 있나..? 잘 모르겠다 사실..ㅎㅎ 실력 이슈..ㅠ)

  • 네이버 블러그 공유하기
  • 네이버 밴드에 공유하기
  • 페이스북 공유하기
  • 카카오스토리 공유하기