fn 키워드를 사용해 정의 함수이름(인자) 형태로 사용 ::을 사용하지 않음 (그냥 함수 이름을 써서 호출) ✅ 예제
fn add(a: i32, b: i32) -> i32 {
a + b
}
fn main() {
let result = add(3, 5); // 함수 호출 (점(.) 안 씀)
println!("3 + 5 = {}", result);
}
✅ 출력 결과
3 + 5 = 8
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
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
| 구분 | 함수(Function) | 메소드(Method) | 연관 함수(Associated Function) |
|---|---|---|---|
| 속하는 대상 | 독립적 (어느 타입에도 속하지 않음) | 특정 구조체(Struct) 또는 열거형(Enum)에 속함 | 특정 구조체(Struct) 또는 열거형(Enum)에 속함 |
| 정의 위치 | impl 블록 밖 | impl 블록 안 | impl 블록 안 |
| 호출 방식 | 함수이름(인자) | 인스턴스.메소드이름(인자) | 타입::함수이름(인자) |
| 첫 번째 인자 | self 없음 | self 있음 | self 없음 |
| 연산자 사용 | 없음 | .(점) 사용 | ::(더블 콜론) 사용 |
fn 키워드로 정의하고 그냥 호출. .(점)으로 호출. self 없이 동작하며, ::(더블 콜론)으로 호출.