solidity #1 솔리디티의 데이터 타입-1

Explanation

솔리디티는 이더리움 가상 머신(Ethereum Virtual Machine)에서 스마트 계약(smart contract)을 작성할 수 있는 정적 프로그래밍 언어입니다. 이 글은 그 첫번째 글로 솔리디티의 데이터 타입 중 간단한 몇가지를 정리해보려 합니다.
이글을 작성한 시점에서 솔리디티의 마지막 버전인 '0.4.24' 버전을 기준으로 작성되었고 글에 포함되어 있는 테스트 코드들은 Remix(http://remix.ethereum.org/)를 통해 직접 테스트 해볼 수 있습니다.

보다 자세하고 정확한 정보는 솔리디티 도큐먼트를 확인하시면 좋을 것 같습니다.
링크 : http://solidity.readthedocs.io/en/v0.4.24/

0. Remix

직접 코드를 작성하고 테스트할 수 있도록 아주 간단하게 리믹스를 사용합니다.
링크 : http://remix.ethereum.org/

에디터란에 해당하는 코드를 작성합니다.

오른쪽에 'Start to compile' 버튼을 선택하여 솔리디티를 컴파일합니다.

'Environment' 를 'Javascript VM' 으로 설정한 후 'Deploy' 선택, 아래쪽에 나타나는 함수의 (ex. get, set..) 들을 선택, 확인합니다.

1. 불리언(Boolean)

bool foo = true;
bool doo = false;

'foo' 와 'doo' 는 Boolean 타입의 변수로 true 또는 false 의 값을 가질 수 있습니다.

pragma solidity ^0.4.24;

contract BooleanTest {
    bool foo;
    function setBoolean(bool boolData) public {
        foo = boolData;
    }
    function getBoolean() public view returns (bool) {
        return foo;
    }
}

2. 정수

부호가 있는 `int`, 부호가 없는 `uint`, 정수 타입으로 8비트 단위로 256비트까지 허용하는 타입입니다.
int8, int16, ... int256, 비트 단위를 표기하지 않으면 256을 의미합니다.
int = int256

pragma solidity ^0.4.24;

contract UintTest {
    uint8 foo = 2;
    function getUint() public view returns (uint8) {
        return foo;
    }
}

3. 고정 소수점 수

`fixed`, `ufixed` 여기에서의 앞의 u는 정수 타입과 같이 부호가 있고 없고를 나타내며, 자세한 표현식은 `fixedMxN` 으로
여기에서 `M`은 8비트 단위를 그리고 `N`은 소수점 자리수를 나타냅니다.
하지만 v0.4.24 기준으로 아직 완전히 지원하지 않습니다.

4. 주소

`address`는 이름처럼 이더리움의 주소 값의 크기인 20바이트의 크기를 가집니다. 주소는 balance, transfer, send, call, callcode, delegatecall 의 멤버(Members)를 가지고 있습니다.
위 멤버들은 해당 주소의 이더를 확인하거나 전송하는 등의 일을 합니다. 이 부분은 후의 쳅터에서 자세히 적어보려합니다.

5. 고정된 크기의 바이트 배열

bytes1, bytes2, ... bytes32, byte 는 bytes1를 의미합니다.
`[]`로 index 접근이 가능하며, 읽기만 가능합니다.

bytes2 test = 'ab';
test[1] //a
test[2] //b
test[1] = 'cc' //error
pragma solidity ^0.4.24;

contract FixedByteArray {
    bytes2 arr2 = 'ab';
    function getFixedByteArray(uint8 idx) public view returns(bytes1) {
        return arr2[idx];
    }
    function setFixedByteArray(bytes2 newData) public {
        arr2 = newData;
    }
}