크립토좀비 솔리디티 #7 - 구조체와 배열 활용

    본 포스팅은 크립토좀비의 레슨1 챕터8 (구조체와 배열 활용편)의 내용들을 비개발자를 대상으로 설명하고 풀이 하였습니다. 크립토좀비는 룸 네트워크(Loom Network)라는 블록체인 기반의 게임 스타트업이 만든 게임을 만들어보는 이더리움 개발 강의로서 매우 재미있고 쉽게 솔리디티(Solidity)를 배울 수 있는 가이드를 제공합니다.




    구조체와 배열 활용


    구조체와 배열에 대해서 배웠지만 아직 그것을 활용하는 방안에 대해서는 배우지 않았습니다. 이번 크립토좀비의 강의는 바로 솔리디티의 매우 핵심적인 배열에 구조체를 삽입하는 것에 대해서 배우는 강의입니다.


    사실 이더리움 기반의 Dapp 개발이라 하면 이더리움의 데이터베이스를 가지고 오고 활용하는 것에 국한 됩니다. 그외의 것들은 나머지 프로그램 언어에서 소화를 해야 하는 것이죠. 그러다보니 솔리디티에서 가장 중요한 것은 데이터를 삽입, 삭제, 갱신, 조회 등을 하는 방법인 CRUD(Create, Read, Update, Delete)를 할 줄 아는 것을 배우는 것입니다.


    CRUD를 위해서는 구조체를 다룰줄 알아야 되고, 데이터베이스에 접근하는 것을 해야 하는데 이더리움 데이터베이스는 별도의 기술이 들어가는 것이 아니라 배열 등을 활용하여 접근을 할 수 있습니다.


    구조체와 배열

    struct Person {

    uint age;

    string name;

    }


    Person[] public people;


    위 예시는 크립토좀비에서 제공하는 예시로 Person이라는 구조체를 만들고, 해당 구조체를 people 이라는 이름의 명칭으로 public 형태의 배열을 생성하였습니다.


    배열 활용

    Person satoshi = Person(172, "Satoshi");

    people.push(satoshi);


    첫번째 라인은 satoshi라는 명칭의 Person 구조체를 생성하였는데 나이는 172세, 이름은 Satoshi라고 선언을 한 것입니다.


    두번째 라인은 push를 써서, satoshi를 people 배열에 삽입을 한 것입니다. 참고로 배열에 push를 사용하여 삽입을 할 때는 배열 끝에 추가를 하게 됩니다. 일반적으로 줄을 선다라고 생각하시면 간단합니다.


    push로 배열에 추가가 된 개념도


    배열 활용(소스 간소화)

    people.push(Person(16, "Vitalik"));


    기존의 2줄로 된 방식을 위와 같이 한줄로도 표현을 할 수 있습니다. 간단하게 등호(=, equal)를 기준으로 우측에 있는 값을 push에 넣은 것입니다.


    Person vitalik = Person(16, "Vitalik");



    문제 및 문제풀이


    문제


    createZombie 함수가 무언가 할 수 있도록 만들어 보세!


    1. 함수에 코드를 넣어 새로운 Zombie를 생성하여 zombies 배열에 추가하도록 한다. 새로운 좀비를 위한 name과 dna는 createZombie함수의 인자값이어야 한다.

    2. 코드를 한 줄로 간결하게 작성해 보자.



    문제 풀이


    pragma solidity ^0.4.19;

    contract ZombieFactory {

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

    struct Zombie {
    string name;
    uint dna;
    }

    Zombie[] public zombies;

    function createZombie(string _name, uint _dna) {
    zombies.push(Zombie(_name, _dna));
    }
    }




    유튜브 채널의 구독과 영상에 좋아요는 큰 힘이 됩니다 :)


    크립토좀비 원본 링크

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


    댓글

    Designed by JB FACTORY