크립토좀비 솔리디티 #5 - 배열 편

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


    이전포스팅



    배열(Array)이란?


    일반적으로 프로그램 언어들은 2가지의 배열 방식을 지원한다. 하나는 정적 배열 방식이고 다른 하나는 동적 배열 방식이다. 결론적으로 말하면 동적 배열이 더 쉬우며, 처음 동적을 하고 나면 도대체 정적 배열을 왜 해야 하는지 이유를 알기 힘들 수도 있다.


    크립토좀비의 배열 예시



    정적배열


    정적배열은 이미 공간을 미리 할당을 해버리는 것이다. 확실한건 정적 배열은 최적화된 공간을 자랑한다. 동적 배열은 계속 확장을 해야 할 준비를 갖춰야 하기 때문에 프로그램 내부 입장에서는 정적 배열보다 느린 속도(다만 체감을 할 수 없는)와 비효율적이다.


    고등학교의 학생 정보를 저장하겠다고 가정을 해보도록 하자. 학생 한명 한명의 데이터를 저장하는 것을 블록체인으로 구현을 한다고 가정을 할 때, 한명 한명은 구조체(바로 이전 강의)로 구현하게 되고 학생들의 수만큼 공간이 필요할 것이다.



    예를 들어 학생이라는 구조체는 이름과, 학년, 반, 번호 이렇게 4가지의 정보를 가지고 있다고 가정을 해보자 그러면 아래처럼 구현을 할 것이다.


    struct Student{

    // 이름

    string name;

    // 학년

    uint grade;

    // 반

    uint class;

    // 번호

    uint number;

    }


    대충 이런식으로 변수명을 짓고 구조체를 생성을 할 것이다. 전체 학생수가 500명이 있다고 가정을 하면 500개의 구조체가 필요하고, 최적화된 500개의 공간에서 작업을 하면 된다.


    데이터타입[개수] 변수명


    정적배열을 선언하는 방법은 위와 같이 데이터타입 후 괄호안에 개수를 지정하고 변수명을 지정한다. 위와 같은 사례에서는 Student[500] students; 와 같이 지정을 하면 된다.



    동적배열


    그러나 잘 생각해보면, 학생수는 전학생이 오고 가거나 누가 퇴학을 당할 수도 있기 때문에 값이 바뀔수가 있다. 즉 500으로 지정을 했지만 학생수는 계속 바뀔수가 있는 것인데 이럴 경우 동적 배열로 선언하는 것이 올바를 것이다.


    동적은 정적과 반대되는 개념이기에 몇개를 선언할지 모르거나 값이 변할경우 사용하면 된다. 동적배열은 아래와 같이 선언하면 된다.


    데이터타입[] 변수명


    안에 "개수"를 넣지 않으면 동적배열로 선언이 되며 값을 쉽게 추가할 수 있을 것이다.



    Public 배열


    이렇게 배열로 만들어진 변수를 다른 컨트랙트들이 읽을 수 있게 하려면 public으로 지정을 하면 된다. 참고로 다른 컨트랙트가 읽을 수 있게 getter 메소드를 자동적으로 생성하지만 setter 메소드를 생성하는 것은 아니다. 그렇기 때문에 읽을 수만 있고 쓸 수는 없다


    데이터타입[] public 변수명


    위와 같이 데이터타입과 변수명 사이에 "public" 문구를 지정하면 해당 변수는 다른 컨트랙트도 이 배열을 읽을 수 있게 된다.



    문제 및 문제풀이


    문제


    문제풀이

    pragma solidity ^0.4.19;

    contract ZombieFactory {

    uint dnaDigits = 16;
    uint dnaModulus = 10 ** dnaDigits;

    struct Zombie {
    string name;
    uint dna;
    }

    // 여기서 시작
    Zombie[] public zombies;
    }


    위에서 설명했던 것처럼, 구조체와 개수가 없는 괄호로 동적 배열을 선언하고 변수명 전에 public을 선언하여 좀비 데이터들이 저장되는 배열화된 구조체 변수를 선언하였다.





    크립토좀비 원본 링크

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


    댓글

    Designed by JB FACTORY