이더리움 개발 - 누구나 할 수 있는 솔리디티(Solidity) 언어 (자료형편) #2

    바로 전 강의에서는 솔리디티(Solidity)를 실행하기 위해서, Remix라는 웹 기반 개발도구(IDE)를 설치 해보고 솔리디티판 Hello World라고 할 수 있는, SimpleStorage를 구현해 보았습니다.


    바로 이전 강의


    오늘은 프로그래밍을 위한 기초 중에 기초인 솔리디티 자료형에 대해서 알아보도록 하겠습니다. 참고로, 자료형이란 어떤 값을 넣을 때 값의 성질을 미리 정의하여, 이상한 값이 들어오는 것을 방지하거나 값을 최적화 시킬 수 있는 기능등이 있습니다.


    예를 들어, 제가 이사를 가야 하는데 저는 혼자 살아서, 20평 이하의 2룸에 최적화된 생활 환경을 보여준다고 해보겠습니다. 그러면 저한테 21평 이상의 집들과 원룸이나 쓰리룸이상이면 불편하다고 생각 될 것입니다. 괜히 집세만 더 비싸고 관리비만 더 들고, 청소할때도 힘들고, 원룸은 너무 복잡하고 등등...


    이렇게 어떤 값을 받아들일 때, 최적화된 공간을 사용하고 잘못된 값을 방지하기 위해서 사용하는 것이 자료형이라고 이해하시면 될 것 같습니다. 




    자료형에 들어가기 전에...


    우선, 여기서 설명하는 자료형은 솔리디티에서 제공하는 모든 자료형을 말하는 것이 아닙니다. 여러가지의 자료형 중 꼭 알아야 되는 몇가지를 간추려서 설명을 해보도록 하겠습니다.



    위에 있는 이 코드는, Remix를 깔면 기본으로 제공해주는 투표에 관련된 스마트 컨트랙트 소스입니다. 아무래도 기본으로 제공을 하는 소스이다보니 이 정도의 소스는 분석을 할 수 있고, 만들어보는 것을 목표로 잡아볼까 합니다. 


    개발자분들은 그나마 위 소스를 보면서, 구조가 크게 어렵지 않네라고 생각을 하실겁니다. 솔리디티가 뭔지 몰라도 대충 해당 소스의 내용이 어떻게 돌아가는지 벌써 머리속에서 굴리시는 분들이 많으실텐데요. 문제는 비개발자 분들은 저 소스를 봤을 때 아마도 이런 표정을 짓지 않았을까 싶네요.


    화가 치민다


    창을 닫지 마시고, 일단 좀 더 제 강의를 들어보시길 추천드립니다. 제가 비개발자분들 개발 강의한 경력이 꽤 됩니다. 어느 부분이 이해가 안되고, 어느정도 자세히 설명해야 하는지 알고 있으니 앞으로의 솔리디티 강의는 비개발자도 이해하는 강의 수준으로 정말 천천히 자주 진행할 예정입니다.



    기본 자료형


    이제, 핵심적인 자료형에 대해서 적어보겠습니다.


    1. 부울형(bool)

    우선, 부울형(혹은 불린형)은 참과 거짓에 대한 값을 뜻합니다. 저장할 수 있는 값은 2개인 true와 false 뿐입니다.

    예를 들어서 저는 남자입니다. 어느 변수의 명칭이 isMale 이라고 하겠습니다. 남자면, true 여자면 false일 겁니다. 변수명이 "너 남자니?"라고 물어보는 거니까요.



    우리는 해당 사용자가 남자라면 isMale에 true 의 값을 집어 넣으면 될 것입니다. 물론 이런 케이스는 거의 쓰지 않는 것이고 우리는 이 자료형을 IF(조건문)에서 자주 볼 수 있습니다. 조건문은 많은 예제로 설명을 해야 할 것 같아서 오늘은 패스하고 :) 바로 다음 강의때 설명해 보도록 하겠습니다. 비개발자분들은 한번에 너무 이해하면 머리아파요.



    2. 정수형(Integer)


    정수형은 바로 전 강의때도 설명을 한 것처럼 문자 그대로 "정수(숫자)"를 넣기 위한 자료형입니다. 음수, 양수, 0값 모두 들어갈 수 있으며, 선언할 때 "int"라는 말이 들어갑니다. 여기에 uint를 넣으면 양수만 인식하는 의미이니 음수가 필요 없을 경우 uint로 선언하시면 됩니다.


    값은 8비트부터 256비트까지 지원합니다. 비트의 개념을 모르는 분들에게 쉽게 설명하자면, 1비트는 전기가 들어오거나, 안들어오거나 둘중의 하나의 값입니다. 그래서 8비트를 표현하는 것은 전기의 신호를 8번 보내는 것과 같습니다. 그래서 가지수는 2의 8승(거듭제곱)이 되며, 2의 8승은 256이라는 값이 나오게 되는 것이죠.


    int8형은 -128 ~ 127수를 입력할 수 있는데 0의 값까지 포함하기에 음수는 128 양수는 127의 수를 표현합니다. uint8형은 여기서 음수만 제외이니 127+128인 0 ~ 255(총 256개)의 수를 표현할 수 있습니다.



    3. 문자열형(string)

    문자열형은 말 그대로 문자열(ex: alice, bob, peter) 등의 값을 처리하기 위한 자료형입니다. 



    4. 열거형(enum)

    열거형은 개발자가 정의를 할 수 있으며, 특정한 값들을 갖는 변수를 만들고 싶을 때 사용합니다. 이를 통해서 가독성을 높일 수 있으며, 사용 예제는 다음 시간에 설명해도록 하겠습니다. 이건 좀 예제와 함께 길게 설명해야 이해가 되거든요 :)



    5. 주소(address)

    주소형은 20바이트(160비트) 값으로 이루어졌는데 이는 이더리움 주소의 크기가 20바이트이기 때문입니다. 주소형은 하위 기능을 호출 할 수 있는데, balance와 같은 계좌 조회 기능과 transfer같은 이더를 전송할 때 사용하거나 gas 같이 가스값을 설정하는 등의 하위 기능을 호출할 수 있습니다.


    주소형은 마찬가지로 긴 설명이 필요하니 다음 포스팅에 적어보도록 하겠습니다.



    실습시간, String 예제 사용


    기존 SimpleStorage

    pragma solidity ^0.4.0;


    contract SimpleStorage {

        uint storedData;


        function set(uint x) public {

            storedData = x;

        }


        function get() public view returns (uint) {

            return storedData;

        }

    }



    String 변수 추가된 SimpleStorage

    pragma solidity ^0.4.24;


    contract SimpleStorage {

        uint storedData;

        string storedNm;

        


        function set(uint x) public {

            storedData = x;

        }

        

        function setNm(string x) public {

            storedNm = x;

        }


        function get() public view returns (uint) {

            return storedData;

        }

        

        function getNm() public view returns (string) {

            return storedNm;

        }

    }


    기존 소스에 string 변수와 setNm, getNm이라는 기능을 추가해보았습니다. 소스를 compile하고, set과 setNm에 각각 문자열을 넣어봐서 작동 유무를 확인해보겠습니다.



    똑같이 a라는 값을 입력하고, 둘다 구동을 하면 getNm은 a가 그대로 출력이 되지만, get은 숫자 10이 출력 되는 것을 확인할 수 있습니다. 여기서 10이 출력되는 이유는 0~9까지는 숫자 그대로인데 알파벳은 a부터 10부터 시작하여, b는 11이런식으로 값이 올라갑니다.


    즉, string으로 지정을 하지 않으면 내부적으로 문자형을 정수형으로 바꾼다는 사실을 확인할 수 있을 것입니다. 다음 포스팅은 bool형의 사용 방법에 대해서 포스팅 해보도록 하겠습니다.



    동영상 강의


    유튜브의 내용은 포스팅 내용과 동일합니다. 

    댓글

    Designed by JB FACTORY