유사 유닛 구조체

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

rust 공부

목록 보기
13/14

유사 유닛 구조체(tuple struct)는 Rust에서 다음과 같은 문법으로 정의하는 구조체입니다:

struct Color(u8, u8, u8);

이는 일반 구조체와 달리 필드 이름 없이 위치(index)로 접근하는 구조체이며,
**유닛 구조체(unit struct)**는 필드가 아예 없는 구조체 (struct Empty;)입니다.


✅ 유사 유닛 구조체(tuple struct)의 주요 용도

1. 새로운 타입을 만들 때 (type safety 강화)

예를 들어 u32가 여러 개 쓰이는 상황에서 의미를 구분하고 싶을 때 유용합니다:

struct UserId(u32);
struct OrderId(u32);

fn get_user_name(id: UserId) { /* ... */ }

let id = UserId(5);
// get_user_name(OrderId(5)); // ❌ 타입이 달라서 컴파일 에러

👉 이처럼 *"같은 자료형이라도 의미가 다른 데이터"*를 안전하게 구분할 수 있습니다.


2. 단순 래핑 (newtype pattern)

기존 타입에 대해 기능을 추가하고 싶을 때도 씁니다:

struct Meters(f64);

impl Meters {
    fn to_cm(&self) -> f64 {
        self.0 * 100.0
    }
}

f64 타입에 기능을 붙이고, 외부에서 직접 .0으로 접근하지 않는 방식으로 캡슐화할 수 있습니다.


3. 단순하면서 이름 붙이기엔 애매한 구조

예: RGB 색상

struct Color(u8, u8, u8);

let red = Color(255, 0, 0);

단순한 데이터 묶음을 만들고 싶을 때 이름 붙이는 게 불필요하게 장황하면 튜플 구조체가 간결합니다.


4. 튜플과 호환성을 유지하면서 타입 안정성 확보

튜플과 비슷하게 다루되, 구조체 이름을 통해 의미를 부여하고 타입 체크를 강화할 수 있습니다.

fn scale(color: Color, factor: u8) -> Color {
    Color(color.0 / factor, color.1 / factor, color.2 / factor)
}

❗️주의: 필드 이름이 없기 때문에 가독성이 떨어질 수 있음

복잡한 데이터에는 일반 구조체가 낫습니다:

struct Color {
    red: u8,
    green: u8,
    blue: u8,
}

📌 요약: 유사 유닛 구조체(tuple struct)는 언제 쓰나?

용도설명
타입을 새로 만들고 싶을 때UserId(u32) 처럼 의미 있는 타입 정의
기존 타입 래핑 (newtype)기능 추가, 캡슐화 용도
단순한 구조 표현RGB처럼 이름 붙일 필요가 없는 단순 자료 묶음
튜플처럼 쓰되 타입 안정성 확보튜플의 단순성 + 구조체의 타입 안정성

필요하다면 일반 구조체와 유사 유닛 구조체 중 어느 쪽이 더 나은지 구체적인 예를 들어 비교해드릴 수도 있습니다.

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

0개의 댓글