자료형
러스트 자료형
- 러스트 자료형(data type)은 크게 3가지 그룹으로 나눌 수 있다.
- 원시 자료형(primitive types)
- 스칼라 자료형
- 부울리언
- 정수
- 부호없는 정수
- 부동소수점
- 단일문자
- 복합 자료형
- 튜플(tuple)
- 배열(array)
- 슬라이스(slice)
- 스칼라 자료형
- 사용자 정의 자료형(custom types)
- 구조체(struct)
- 열거(enum)
- 참조(reference)
부울리언
: bool형태로 선언true,false두 가지 값을 가짐- 출력시에도
true,false두 가지 문자열로 표시됨
정수
- 부호 있는 정수:
i8,i16,i32,i64,i128,isize - 부호 없는 정수:
u8,u16,u32,u64,u128,usize
부동소수점
f32,f64
단일 문자
: char형태로 선언- 러스트의 문자는 32비트
- C/C++과 달리 정수형과 호환되지 않는 독자적인 자료형
- UTF-8 인코딩만 사용 가능
- 다른 인코딩을 사용하는 경우 char 자료형이 아니라 u8 (1바이트 부호없는 정수) 자료형에 숫자로 저장해야 함
튜플
- 서로 다른 자료형의 묶음
: (원소1의 자료형, 원소2의 자료형, 원소3의 자료형)형태로 선언튜플변수명.인덱스숫자형태로 원소 접근
배열
- 같은 자료형의 묶음
:[원소의 자료형; 길이]형태로 선언배열변수명[인덱스숫자]형태로 원소 접근
구조체
여러가지 자료형의 필드를 포함하는 컨테이너 자료형
사용자 정의 자료형
구조체 타입을 정의한 후 해당 구조체 변수를 초기화
타입 정의
struct 구조체_타입명 { 필드명1: 필드타입1, 필드명2: 필드타입2, 필드명3: 필드타입3, }타입 정의 예시
struct Complex { re: f32, im: f32, }구조체 변수 초기화
let 구조체_변수명 = 구조체_타입명 { 필드명1: 필드값1, 필드명2: 필드값2, 필드명3: 필드값3, }구조체 변수 초기화 예시
let c1 = Complex { re: 0.1, im: 2.2, }구조체 필드 접근시에는
구조체_변수명.필드명형식을 사용
제너릭 구조체
제너릭(generic)
- 구조체의 필드타입을 미리 정하지 않고 변수 초기화시에 받을 수도 있음
제너릭 타입 정의
struct 구조체_타입명<필드타입변수1, 필드타입변수2> { 필드명1: 필드타입변수1, 필드명2: 필드타입변수2, 필드명3: 필드타입3, }제너릭 타입 정의 예시
struct Complex<T> { re: T, im: T, }제너릭 타입 변수 초기화 예시
let c1 = Complex<i32> { re: 1, im: 2, }
콜렉션
- 러스트 언어 자체가 제공하는 자료형이 아니라 구조체로 정의된 자료형
- 러스트와 함께 설치되는 표준 패키지에서 제공
- 예시
String: 문자열을 처리하는 구조체Vec: 길이가 정해지지 않은 열을 처리하는 제너릭 구조체HashMap: 키-값 형식의 사전 정보를 처리하는 제너릭 구조체
열거형
- 러스트의 열거형은 C 언어의 enum 타입과 union 타입을 합쳐놓은 기능
- enum 타입처럼 가질 수 있는 값의 종류(category)를 제공
- 동시에 union 타입처럼 해당 종류일 때의 값도 같이 제공
- C 언어의 union 타입은 현재 어떤 타입인지를 알려주지 않지만
- 러스트의 열거형은 현재 어떤 타입인지를 종류로 알려주면서 동시에 그 타입의 정보도 가지고 있음
참조
- 변수의 메모리 주소를 저장하는 자료형
- 변수의 단순한 별칭(alias)인 C++ 언어의 참조와는 달리 실제로 메모리 주소를 저장하는 별도의 메모리를 가지는 객체라는 점에서 /C++ 언어의 포인터와 유사함
- C/C++ 언어의 포인터와는 달리 각종 제약이 존재함
슬라이스
- 배열과 유사하지만 길이가 정해지지 않는 데이터를 다루는 자료형
:[원소의 자료형]형태로 선언- 슬라이스는 그 자체 타입으로는 절대 변수를 만들 수 없음
- 항상 슬라이스에 대한 참조 변수만 만들 수 있음
str자료형- 길이가 정해지지 않은 문자열을 저장하는 자료형
- 대표적인 슬라이스 자료형
- 그 자체로는 변수 생성 불가
- 항상 참조 변수만 만들 수 있음
타 언어와의 차이점
클래스 미제공
- C++, Python, Java 등의 객체지향언어처럼 클래스를 제공하지 않는다
- 구조체를 객체지향언어의 클래스처럼 활용
자료형 추정
- 할당되는 값을 이용하여 컴파일러가 자료형을 추정하는 것이 가능할 때는 사용자가 자료형의 명시하지 않아도 됨
- 실행 중 값이 입력되는 경우 등 추정이 불가능할 경우에는 자료형을 명시해야 함