필드가 없는 구조체

백엔드&인프라 추종자·2025년 7월 18일

rust 공부

목록 보기
14/14

좋은 질문입니다!
필드가 없는 구조체는 Rust에서 다음과 같은 용도로 자주 사용됩니다:


✅ 1. "단위 구조체" (Unit-like struct)

struct MyMarker;

🔸 특징

  • 필드가 전혀 없음
  • 인스턴스도 MyMarker처럼 괄호 없이 사용 가능

🔸 주요 용도

용도설명
마커 타입(Marker type)타입 수준에서 의미를 구분하기 위한 빈 구조체
예: PhantomData<T>와 함께 사용
제네릭 구분용 태그제네릭에서 특정 동작을 분기할 때
상태 머신 구현상태별로 구조체를 정의하고 필드 없이 구분
트레이트 구현용 태그특정 타입에 대해 트레이트를 구현하고, 타입 인자로만 활용
제로 코스트 타입필드가 없기 때문에 메모리 차지도 안 함 (크기 = 0)

✅ 2. 예시: 마커 타입

struct Admin;
struct Guest;

trait Permission {
    fn can_delete(&self) -> bool;
}

impl Permission for Admin {
    fn can_delete(&self) -> bool { true }
}

impl Permission for Guest {
    fn can_delete(&self) -> bool { false }
}

fn main() {
    let user1 = Admin;
    let user2 = Guest;

    println!("Admin can delete? {}", user1.can_delete());
    println!("Guest can delete? {}", user2.can_delete());
}

👉 여기서 Admin, Guest는 필드가 없는 단위 구조체이지만 타입만으로 역할을 구분합니다. 매우 강력한 타입 시스템 응용입니다.


✅ 3. PhantomData와 함께 사용

use std::marker::PhantomData;

struct Wrapper<T> {
    _marker: PhantomData<T>,
}

👉 실제 데이터는 없지만, 타입 T에 대한 의존성을 명시하고자 할 때 사용됩니다.


✅ 4. enum과 함께 상태 관리

enum State {
    Start,
    InProgress,
    Done,
}

각 상태가 데이터를 가지지 않는 경우, 내부적으로는 unit-like 구조체와 비슷한 형태로 취급됩니다.


📌 요약

형태예시설명
필드 없는 구조체struct Foo;타입 구분, 마커 용도, 상태 표현, 트레이트 디스패치 등에 사용
필드 없는 enum variantenum MyState { Init, Done }상태 머신 등에서 유용

궁극적으로, **필드 없는 구조체는 '의미만 있는 껍데기'**로 쓰이며, Rust의 강력한 타입 시스템을 활용한 안전성과 명시성을 위해 매우 유용하게 쓰입니다. 필요하시면 실전 예제 더 보여드릴 수도 있어요!

profile
AI 답변 글을 주로 올립니다.

0개의 댓글