카테고리 없음

Rust 구조체(Struct)와 메서드 정의하기

mystory55801 2025. 5. 29. 22:52

Rust 구조체(Struct)와 메서드 정의하기

Rust에서 구조체(Struct)는 여러 데이터를 하나로 묶어 새로운 데이터 타입을 정의할 때 사용됩니다. 객체 지향 언어의 클래스와 비슷한 역할을 하지만, Rust만의 안전성과 효율성을 갖춘 특징이 있습니다. 이번 글에서는 구조체 선언법과 함께 메서드 정의 및 호출 방법을 자세히 알아보겠습니다.

1. Rust 구조체 기본 선언법

구조체는 struct 키워드로 정의하며, 필드 이름과 타입을 함께 지정합니다. 예를 들어, 2차원 좌표를 나타내는 구조체를 선언할 수 있습니다.


struct Point {
    x: i32,
    y: i32,
}

이제 이 구조체를 사용해 변수에 값을 저장할 수 있습니다.


fn main() {
    let p = Point { x: 10, y: 20 };
    println!("x: {}, y: {}", p.x, p.y);
}

2. 구조체 메서드 정의하기 (impl 블록)

Rust에서는 impl 블록을 통해 구조체에 메서드를 정의합니다. 메서드는 첫 번째 매개변수로 &self를 받으며, 이는 해당 구조체 인스턴스를 가리킵니다.


impl Point {
    fn display(&self) {
        println!("Point({}, {})", self.x, self.y);
    }
}

위 메서드는 구조체 내부 필드에 접근해 값을 출력합니다.

3. 메서드 호출하기

메서드를 호출할 때는 점(.) 연산자를 사용합니다.


fn main() {
    let p = Point { x: 5, y: 7 };
    p.display();
}

4. 메서드에 매개변수와 반환값 추가하기

메서드도 함수처럼 매개변수와 반환값을 가질 수 있습니다. 예를 들어, 두 점 사이의 거리를 계산하는 메서드를 추가해보겠습니다.


impl Point {
    fn distance_to(&self, other: &Point) -> f64 {
        let dx = (self.x - other.x) as f64;
        let dy = (self.y - other.y) as f64;
        (dx * dx + dy * dy).sqrt()
    }
}

fn main() {
    let p1 = Point { x: 0, y: 0 };
    let p2 = Point { x: 3, y: 4 };
    let dist = p1.distance_to(&p2);
    println!("두 점 사이 거리: {}", dist);
}

5. 연관 함수 (Associated Functions) 정의하기

메서드와 달리 self 매개변수를 받지 않는 함수를 연관 함수라 합니다. 보통 new 같은 생성자를 구현할 때 사용합니다.


impl Point {
    fn new(x: i32, y: i32) -> Point {
        Point { x, y }
    }
}

fn main() {
    let p = Point::new(8, 9);
    p.display();
}

결론: Rust 구조체와 메서드는 효율적인 데이터 모델링의 기본

Rust에서 구조체와 메서드는 데이터와 관련 기능을 한 곳에 묶어 깔끔하고 안전한 코드를 작성할 수 있도록 돕습니다. impl 블록으로 메서드를 정의하고, 연관 함수를 통해 생성자를 구현하면 더욱 직관적인 객체지향 프로그래밍 스타일을 구현할 수 있습니다.

초보자라도 기본 문법과 사용법을 익히면 복잡한 데이터 구조도 쉽게 다룰 수 있으니, 다양한 예제를 통해 연습해 보세요.