본문 바로가기
Blockchain/Move

자료형에 대해서 알아볼까요

by 잘먹는 개발자 에단 2024. 10. 27.

Move 언어는 자산 관리와 보안을 중시하는 블록체인 환경에 맞추어서 다양한 자료형을 제공합니다. Move의 자료형은 크게 기본 자료형과 복합 자료형으로 나눌 수 있습니다.

 

1. 기본 자료형 Primitive Types

 

1.1 정수형 Unsigned Integer

Move는 다음과 같은 부호없는 정수형을 지원합니다.

- u8 : 8비트 정수, 값 범위는 0부터 255

- u64 :  64비트 정수, 값 범위는 0부터 2^64 -1 

- u128 : 128비트 정수, 값 범위는 0부터 2^128-1

 

Move의 정수형은 모두 부호가 없기 때문에, 음수 값은 사용할 수 없으며, 정수만 사용해야 합니다. 자산의 개수나 특정 값들을 나타내기 위해 주로 사용되며, 산술 오버플로우는 Move의 검증 시스템에서 자동으로 체크됩니다.

let small_number : u8 = 10;
let medium_number : u64 = 1000;
let large_number : u128 = 1000000;

 

 

1.2 논리형 Boolean

Move는 true와 false 두가지 값만을 갖는 Boolean 타입을 제공합니다. 

주로 조건문에서 조건을 확인하거나 상태 플래그를 설정할 때 사용합니다.

let is_active : bool = true;
if(is_active){
	// is_active가 true일 때 실행되는 코드
}

 

 

1.3 주소형 Address

Move의 address 타입은 블록체인 상의 계정 주소를 나타내는데 사용됩니다.

주소형은 트랜잭션의 발신자나 특정 계정과 관련된 데이터 및 권한을 관리하는데 중요한 역할을 합니다.

let account_address : address = 0x1; 
// 예시로 주소를 0x1로 설정

 

 

1.4 서명자형 Signer

signer는 Move에서 특정 트랜잭션의 서명자를 나타내는 특수 타입입니다.

signer는 주소형과 유사하지만, 트랜잭션을 보낸 계정을 특정할 때 주로 사용합니다. 블록체인 네트워크 상에서 트랜잭션을 검증하거나 접근 권한을 부여할 때 필수적인 역할을 합니다.

public fun only_owner(signer: &signer){
	// 트랜잭션 서명자만 실행할 수 있는 함수
}

 

 

 

2. 복합 자료형 Complex Types

 

2.1 벡터형 (vector) (리스트)

vector는 Move의 동적 배열 타입입니다. vector는 동일한 자료형의 여러 개의 값을 하나의 리스트로 관리할 수 있도록 해줍니다.

Move에서 유일하게 제공되는 컬렉션 자료형으로, vector<u8>, vector<u64> 등 다양한 타입의 벡터를 사용할 수 있습니다.

use std::vector;

let numbers: vector<u64> = vector::empty<u64>(); // 빈 벡터 생성
vector::push_back(&mut numbers, 10); // 벡터에 값 추가
vector::push_back(&mut numbers, 20);

&mut는  Move에서 가변 참조 mutable reference를 나타냅니다. 가변 참조는 참조한 값이 수정될 수 있음을 나타내며, 변수에 대한 읽기 뿐만 아니라 쓰기도 가능하게 합니다. 이는 &vec처럼 불변참조 immutable reference 를 사용하는 경우와 대비됩니다. 불변참조는 참조한 값을 읽기만 가능하고 변경은 불가능합니다.

 

&mut와 &의 차이

- &mut 가변참조 : 참조된 값이 수정 가능하며, 함수 내에서 변경할 수 있습니다.

- & 불변참조 : 참조된 값을 읽기만 가능하며, 값을 수정할 수 없습니다.

module ExampleModule {
    use std::vector;

    public fun add_elements() {
        let mut numbers = vector::empty<u64>(); // 빈 벡터 생성
        vector::push_back(&mut numbers, 10); // 벡터 끝에 10 추가
        vector::push_back(&mut numbers, 20); // 벡터 끝에 20 추가
    }
}

 

 

 

2.2 구조체형 Struct

Move의 구조체는 여러 필드를 하나의 그룹으로 묶는데 사용됩니다.

구조체는 주로 자원을 나타내는데 사용되며, has key, has store 속성을 지정해 블록체인 상에서 자산으로 사용할 수 있습니다.

struct Coin has key {
	value : u64,
}

let my_coin = Coin{ value:100 };

 

 

 

3. 사용자 정의 타입과 자원 Resource

Move에서 가장 중요한 개념인 Resource 타입입니다.

자원 타입은 has key, has store 속성을 갖는 구조체로 정의됩니다.

자원은 복사나 삭제가 불가능하며, 단 하나의 소유자만 가질 수 있습니다. 블록체인에서 자산의 소유권을 보장하기 위해 특별히 설계된 특성입니다.

struct Token has key, store{
	balance : u64,
}

public fun create_token(balance : u64) : Token{
	Token{ balance }
}

위에서 Token이라는 자원 타입을 정의했고, create_token 함수를 통해 balance 값으로 초기화된 Token 자원을 생성할 수 있습니다.

'Blockchain > Move' 카테고리의 다른 글

반복문을 쓸 수 없다면, 반복 작업을 어떻게 하나요?  (0) 2024.10.27
Move의 특징  (0) 2024.10.27