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 |