크립토좀비 솔리디티 #2 (상태 변수 & 정수)

    본 포스팅은 크립토좀비의 레슨1 챕터3의 내용을 설명한 내용입니다. 크립토좀비는 룸 네트워크(Loom Network)라는 블록체인 업체가 만든 강의 및 게임입니다. 매우 재미있고 쉽게 솔리디티(Solidity)를 배울 수 있는 가이드를 제공합니다.


    이전 포스팅




    변수는?


    우선 솔리디티를 시작하기에 앞서 변수라는 것을 먼저 설명을 하겠습니다. 변수는 한자로 변하는 수를 의미합니다. 즉 어떤 값이 계속 변할 수 있는 것을 의미하는데 변수는 워낙 방대합니다 사람 나이, 키, 심지어 이름도 법원에 요청을 하면 변경을 할 수 있을 것입니다.


    이렇게 "나이","키","이름"같이 변할 수 있는 값을 변수라고 합니다. 그럼 이것과 반대되는 것은 무엇일까요? 당연하게도 변할 수 없는 값일 겁니다. 우리가 수학 시간에 배우 파이(pie, 3.14) 라든지, 1이라고 하는 것은 변할 수 없기 때문에 상수 입니다.


    c = 1 + 2


    위 3가지 숫자 및 문자 중에 어떤 것은 변수이고 상수일까요?


    정답은 c는 변수이고, 1과 2는 상수입니다. 예를 들어 1에 2을 대입할 수 없습니다 애시당초 말이 안되는 것입니다. 1는 1이라는 의미 그 자체이기 때문입니다. 그에 반해 c는 뒤에 나오는 숫자가 무엇이 오느냐에 따라서 값이 바뀝니다. 그렇기 때문에 변하는 수인 변수가 되는 것이죠.



    이렇듯 변수는 물건을 담는 그릇이라 생각을 하시면 됩니다.



    상태 변수


    솔리디티는 컨트랙트 저장소에 영구적으로 저장이 되는 상태 변수라는 것이 있고 일시적으로 저장이 되는 로컬 변수가 있습니다. 즉 상태 변수는 값을 계속 유지하며, 공통으로 쓰고 데이터를 장기적으로 저장하기 위한 변수라고 인식하면 되며, 로컬 변수는 1회성으로 해당 구역에서만 쓰는 값이라고 인식을 하시면 됩니다. 


    한마디로 컨트랙트에 기록하고 싶다면 상태 변수를 사용하시면 됩니다. 상태 변수는 아래와 같이 선언할 수 있습니다.


    contract example {

    uint a = 100;

    }


    contract는 바로 전 장에서 컨트랙트를 작성하기 위해서 선언하는 것으로 알고 있으며,  a = 100; 이라는 것도 대충 a이라는 변수에 100이라는 상수값을 대입한다라는 것으로 알 수 있겠습니다만  uint 라는 것이 생소할 것입니다.



    uint



    uint라는 것은 unsigned integer 라는 것의 약어로 다른 말로 "양수"를 뜻합니다. 즉 음수가 아닌 수가 uint 입니다. uint는 여러가지 종류가 있는데 uint8, uint16, uint32 등 선언할 수 있습니다만 특별한 일이 없을 경우 보편적으로 uint를 그냥 사용하게 됩니다.



    uint는 내부적으로 uint256이라는 말과 동일합니다. 그럼 여기서 uint 뒤에 붙은 숫자들은 무엇일까요?


    뒤에 나오는 숫자는 bit 수를 의미하며 비트는 0과 1의 값을 의미합니다. 우리가 학창시절에 배웠던 2진수를 떠올려보겠습니다. 2진수의 값이 2개가 있다면 몇가지 수를 표현할 수 있을까요? 정답은 4개입니다. 


    그러면 3개가 있을 경우 몇가지 수를 표현할 수 있을까요? 정답은 8개입니다. 즉, 2 * 2 * 2 * 2... 이런식으로 숫자값을 컴퓨터가 표현을 할 수 있게 됩니다. uint8은 그럼 2를 8번 곱하는 것이고, 이를 연산하면 256이라는 값이 나옵니다. 한마디로 256가지의 숫자를 표현할 수 있다는 것을 의미합니다.


    숫자를 이런식으로 정의를 할 때는 저장소를 아끼기 위함입니다. 즉 숫자값이 256보다 아래로만 구성이 되어 있따면 굳이 저장소를 낭비할 필요가 없다는 것입니다. 예를 들어 학교 점수를 기록하는 것이라면 0점부터 100점까지 기록이 될텐데 이렇게 256개의 이하로 이루어진 숫자를 굳이 더 많은 공간을 써서 기록 할 필요는 없을 것입니다.



    문제


    문제

    우리의 좀비 DNA는 16자리 숫자로 결정될 걸세.

    dnaDigits라는 uint를 선언하고 16이라는 값을 배정해 보세요.


    풀이

    pragma solidity ^0.4.19;

    contract ZombieFactory {

    // 여기서 시작
    uint dnaDigits = 16;
    }




    강의에 관련된 크립토 좀비 경로

    https://cryptozombies.io/ko/lesson/1/chapter/3


    레슨1 챕터3 화면


    댓글

    Designed by JB FACTORY