Skip to content

Latest commit

 

History

History
55 lines (48 loc) · 1.39 KB

impl.md

File metadata and controls

55 lines (48 loc) · 1.39 KB

Impl

struct My_struct {
  no: i32,
}
fn show_no(data: My_struct) {
  println!("{:?}", data.no);
}
fn main() {
  let my_struct = My_struct { no: 123 };
  show_no(my_struct);
}

구조체를 사용할때 위와 같이 사용할 수 있다. 하지만 구조체 자체의 응집도를 더 높이고 싶다면 impl을 사용하면 된다.

struct My_struct {
  no: i32,
}
impl My_struct {
  fn show_no(&self) {
    println!("{:?}", self.no);
  }
}
fn main() {
  let my_struct = My_struct { no: 123 };
  my_struct.show_no();
}

인자로 넘어오는 구조체는 &self를 통해 동일한 이름의 구조체 소유권을 대여해 접근할 수 있다. show_no 함수가 impl안에 들어가면서 My_struct 구조체의 응집도가 훨씬 강해진 것을 볼 수 있다.

struct My_struct {
  no: i32,
}
impl My_struct {
  fn new() -> Self {
    Self { no: 321 }
  }
  fn show_no(&self) {
    println!("{:?}", self.no);
  }
}
fn main() {
  let my_struct = My_struct::new();
  my_struct.show_no(); // 321
}

만약 구조체를 동적으로 선언하고 싶다면 impl에서 위와 같이 하면 된다. Self 키워드는 자기 자신을 반환하므로 My_struct 구조체를 의미하게 된다.

NOTE: my_struct.new()는 되지 않는다. 구조체의 함수로 사용되고 싶다면 &self 파라미터가 반드시 있어야 한다.