rust function, method 차이

agnusdei·2025년 1월 29일
0

🟠 1. 함수(Function)

  • 특정 구조체(Struct)나 열거형(Enum)에 속하지 않는 독립적인 함수
  • fn 키워드를 사용해 정의
  • 호출할 때 함수이름(인자) 형태로 사용
  • ::을 사용하지 않음 (그냥 함수 이름을 써서 호출)

예제

fn add(a: i32, b: i32) -> i32 {
    a + b
}

fn main() {
    let result = add(3, 5); // 함수 호출 (점(.) 안 씀)
    println!("3 + 5 = {}", result);
}

출력 결과

3 + 5 = 8

🟢 2. 메소드(Method)

  • 특정 구조체(Struct) 또는 열거형(Enum)에 속한 함수
  • impl 블록 안에서 정의
  • 반드시 첫 번째 인자로 self를 받을 수 있음
  • 호출할 때 .(점) 연산자를 사용

예제

struct Rectangle {
    width: u32,
    height: u32,
}

impl Rectangle {
    // 메소드 정의 (self 사용)
    fn area(&self) -> u32 {
        self.width * self.height
    }
}

fn main() {
    let rect = Rectangle { width: 10, height: 5 };
    let area = rect.area(); // 점(.)을 사용해 메소드 호출
    println!("면적: {}", area);
}

출력 결과

면적: 50

🔵 3. 연관 함수(정적 메소드, Associated Function)

  • 특정 구조체(Struct)나 열거형(Enum)과 관련되지만, 인스턴스 없이 호출 가능
  • self를 받지 않음
  • 보통 생성자 역할을 함
  • ::(더블 콜론) 연산자로 호출

예제

struct Rectangle {
    width: u32,
    height: u32,
}

impl Rectangle {
    // 연관 함수 (self 없음)
    fn new(width: u32, height: u32) -> Rectangle {
        Rectangle { width, height }
    }
}

fn main() {
    let rect = Rectangle::new(10, 5); // ::을 사용해 연관 함수 호출
    println!("Rectangle: {} x {}", rect.width, rect.height);
}

출력 결과

Rectangle: 10 x 5

🔥 4. 함수 vs 메소드 차이 완벽 정리

구분함수(Function)메소드(Method)연관 함수(Associated Function)
속하는 대상독립적 (어느 타입에도 속하지 않음)특정 구조체(Struct) 또는 열거형(Enum)에 속함특정 구조체(Struct) 또는 열거형(Enum)에 속함
정의 위치impl 블록 밖impl 블록 안impl 블록 안
호출 방식함수이름(인자)인스턴스.메소드이름(인자)타입::함수이름(인자)
첫 번째 인자self 없음self 있음self 없음
연산자 사용없음.(점) 사용::(더블 콜론) 사용

✅ 최종 요약

  1. 함수(Function): 일반적인 함수, 특정 구조체와 관계 없음. fn 키워드로 정의하고 그냥 호출.
  2. 메소드(Method): 특정 구조체(Struct)나 열거형(Enum)에 속하며 .(점)으로 호출.
  3. 연관 함수(정적 메소드, Associated Function): self 없이 동작하며, ::(더블 콜론)으로 호출.
profile
DevSecOps ⚙️ + CTF🚩

0개의 댓글