구조체 타입
구조체 타입
실제 데이터를 다룰 때 서로 다른 타입의 값들을 한 덩어리로 엮어야 하는 경우가 많아요. Rust에서는 그럴 때 구조체 타입(struct type) 을 써요. 구조체 타입은 다른 타입들을 이질적인 곱(heterogeneous product) 으로 묶은 타입인데, 이때 묶인 각 타입을 필드(field) 라고 불러요.
출처: Rust Reference
본문
구조체 타입은 구조체 표현식(struct expression) 으로 새 인스턴스를 만들어요. 값을 만들 때마다 필드를 하나씩 채워서 구성한다고 생각하면 돼요.
메모리 배치에 관해서는 한 가지 알아둘 점이 있어요. 구조체의 메모리 레이아웃은 기본적으로 정의되지 않아요(undefined). 컴파일러가 필드 재배치 같은 최적화를 자유롭게 할 수 있게 하려는 의도거든요. 다만 repr 속성을 쓰면 이 레이아웃을 고정할 수 있어요. 어느 쪽이든, 대응하는 구조체 표현식에서는 필드를 어떤 순서로 적어도 상관없어요 — 결과로 만들어지는 구조체 값은 항상 같은 메모리 레이아웃을 가져요.
구조체의 필드에는 가시성 수식자(visibility modifier) 를 붙일 수 있어요. 이렇게 하면 모듈 바깥에서 구조체 안의 데이터에 접근하는 것을 제어할 수 있죠.
구조체 타입에는 세 가지 종류가 있어요.
- 튜플 구조체(tuple struct) 타입은 필드에 이름이 없다는 점만 빼면 일반 구조체 타입과 똑같아요. 필드를 위치로 구분하는 구조체라고 생각하면 쉬워요.
- 유닛 구조체(unit-like struct) 타입은 필드를 전혀 갖지 않아요. 그래서 대응하는 구조체 표현식이 만들어내는 단 하나의 값이 바로 그 타입에 존재하는 유일한 값이 돼요.
개념적으로 보면 구조체 타입은 C의 구조체 타입, ML 계열의 레코드 타입, Lisp 계열의 구조체 타입과 비슷한 위치에 있어요.
더 알아보기 (Learn more)
- Rust Reference - Struct expressions — 구조체 값을 만드는 표현식
- Rust Reference - Tuple types — 필드에 이름이 없는 튜플 타입