자료형

러스트 자료형

  • 러스트 자료형(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 등의 객체지향언어처럼 클래스를 제공하지 않는다
  • 구조체를 객체지향언어의 클래스처럼 활용

자료형 추정

  • 할당되는 값을 이용하여 컴파일러가 자료형을 추정하는 것이 가능할 때는 사용자가 자료형의 명시하지 않아도 됨
  • 실행 중 값이 입력되는 경우 등 추정이 불가능할 경우에는 자료형을 명시해야 함