[몰라도해보는]크립토좀비 Lesson1. 좀비공장만들기 - 2

in kr •  6 years ago 


https://cryptozombies.io/ko/course

Lesson1. 좀비 공장 만들기 – (2)

지난 시간에 이어서 계속 좀비공장을 만들어보자.

챕터 4: 수학연산

간단한 덧셈, 뺄셈, 곱셈, 나눗셈 계산은 우리가 일반적으로 쓰는 것처럼 쓰면 된다. 간단하다.
프로그램에 익숙치 않다면 X % Y 연산에 생소할 수 있는데.. X를 Y로 나누었을 때 나오는 나머지를 구하는 연산이다.
예를 들어..
x = 10 % 3
은 10을 3으로 나누면 나머지가 1이되니까… x값은 1이 된다.
X ** Y 는 거듭제곱을 의미한다. X의 Y거듭제곱 (X의 Y승)
예를 들어
y = 2 ** 10
2의 10거듭제곱은 1024이므로 따라서 y값은 1024가 된다.
이건 프로그래밍이 아닌 단순한 산수를 컴퓨터가 알아먹게 표현하는 방법이다. (다른 프로그래밍언어에 익숙하다면 이걸 왜 설명하나 싶은...?)
어쨌든 시키는대로 코드를 짜보자

pragma solidity ^0.4.19;

contract ZombieFactory {

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

}

뭐지.. 갑자기 왜 dnaModulus 변수를 선언하고 10의 16승을 시키지??? 개인적으로 크립토좀비의 아쉬운 점이다. 이런 행위를 왜 해야하는지 설명이 부족하다. 사실 이런 고민은 직접 자기가 원하는 프로그램을 짜보면서.. 변수명을 뭘로 짓지 같은 고통을 받아야 되는데.. 크립토좀비는 단순히 solidity의 문법을 쉽게 전달하고자 해서 이런 부분이 생략된 것 같다.

어쨌든 여기까지 코드를 짜면 우리는 16이 들어있는 dnaDigits이라는 변수와 10,000,000,000,000,000라는 수가 들어있는 변수 dnaModulus를 가진 contract를 만들었다.

챕터 5: 구조체

구조체.. struct는 class와 비슷한 개념이다. (데자뷰인가.. contract랑 class가 비슷하다고 했던 것 같 같은데… 어쩌겠는가.. 비슷하긴 비슷한데. 어떤 프로그래밍 언어를 배웠는지에 따라 설명이 달라달라 있을 것 같다. Class나 object랑 비슷한거다 생각하면 된다. 물론 차이는 있겠지만.)
여기서는 Zombie라는 구조체(struct)를 선언한다. 좀비라는 녀석이 존재하기 위해 필요한 자료들은 struct 안에 넣어주는 것이다. 여기서는 좀비의 이름과 dna를 좀비라는 struct안에 선언한다.

pragma solidity ^0.4.19;

contract ZombieFactory {

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

    struct Zombie {
        string name;
        uint dna;
    }

}

구조체(struct)를 만들고 구조체 이름을 Zombie라고 지어준다.
(cf. 대문자로 시작하는 명사로 시작한다.)
앞으로 좀비라는 녀석이 만들어질 때는 필수적으로 name과 dna가 있어야 한다!
(추가 - 앞서 uint는 음의 정수를 제외한 정수를 담는 변수형(데이터타입, data type)이라고 했다. string은 문자열을 담는 변수형이다.)

챕터 6: 배열

챕터 5까지 무사 클리어하고 나면.. 뜬금없이 배열이 나오고, solidity가 정적 배열과 동적 배열 모두를 지원한다는 말이 나온다. (여기서 심란해졌다. 배열을 설명하고 정적 배열과 동적배열이 뭔지 설명해야하는가…. 배열을 안다고 전제하고 정적 배열과 동적 배열을 설명해야하는가…)

변수는 내용을 담기 위한 상자이고, 배열은 그런 상자를 다닥다닥 붙여서 한번에 관리하기 쉽게 만들어 놓은 것이다. 동적 배열은 내가 담으려는 데이터 수에 맞게 상자의 개수가 알아서 조절되는 것이고, 정적 배열은 사전에 선언된 상자의 개수가 정해져 있어 거기에 맞춰 내가 데이터를 담아야 하는 것이다.

왜 이런 것이 필요하느냐에 대한 논의도 있겠지만 여기서는 생략한다. (구글에게 넘기겠다.)

선언 법은 데이터타입을 적고, 뒤에 []를 붙여준다. 그리고 배열의 이름을 선언해준다.
uint[] dynamicArray
uint[5] fixedArray
단순히 []만 붙여주면 동적 배열, []사이에 숫자를 써주면 정적배열이다.

아무튼, solidity는 둘 다 지원한다고 하니 잘은 몰라도 좋은 거 같다. 심지어 앞서 선언했던 구조체(struct)도 배열로 선언할 수 있다고 자랑하니까 박수 쳐주자.

구조체 선언은 앞서 지었던 구조체 이름으로 선언을 한다. 괜히 대문자로 시작하는 이름을 지은게 아니다. 앞서 struct를 Zombie로 선언했으니, 앞으로 좀비 구조체를 선언하려면 데이터타입 적는 자리에 Zombie를 적어줘야한다. 동적배열로 선언을 원하면 Zombie[], 정적배열로 선언하려면 [] 사이에 넣고 싶은 숫자를 넣어줘라.)

public 배열

갑자기 너무 뜬금없다. public을 선언하라고 하고 이렇게 선언하면 다른 컨트렉트들이 이 배열을 읽을 수 있단다. 분명 엄청 친절한 설명이지만… 처음 공부하는 입장에서 이해가 안간다면 ‘아무나 막 건드릴 수 있는 배열로 선언하고 싶으면 public’이라고 생각하면 된다.
(산넘어 산이라고 getter 메소드를 자동으로 생성한다고 자랑을 하는데.. 이게 뭔데.. 그냥 넘어가자)

아무튼 시키는 대로 코드를 짜보면 다음과 같다.

(구조체를 선언했을 때 Zombie도 색깔이 변하면 좋을텐데.. 안바뀌니 뭔가 아쉽다)
어쨌든 zombies라는 이름의 퍼블릭한 Zombie 구조체 배열을 만들었다.
(처음 공부할 때.. 와아 이걸 대체 왜하는거야ㅠㅠ 했던 것 같다. 이런 생각이 드는 사람이 있다면 안심해도 좋다.)

내용정리

챕터 4: 수학연산 – 일반 연산이랑 똑같다! %, ** 정도 모른다면 정리하면 된다.

챕터 5: 구조체 - 내가 만들어서 정의하는 데이터타입 같은거.. 라고 설명하면 이해가 쉬우려나. name과 dna 데이터가 들어있는 데이터타입을 Zombie라고 부를꺼야. 앞으로 이런 데이터타입이 필요하면 Zombie라고 써서 선언하면 됨! 작업내용을 번역하면 이렇다.

챕터 6: 배열 – Solidity는 배열을 지원한다. 동적배열, 정적배열 다 지원하고 구조체에서도 사용이 가능하다. public이라는게 언급되는데 지금은 이해 못해도 된다. 배열이 어렵다면 아래 링크를 참고.

https://ko.wikipedia.org/wiki/%EB%B0%B0%EC%97%B4 위키백과 - 배열


내가 공부하고자 시작한 일인데 막상 설명하려하니 이것도 모르겠고 저것도 모르겠고. 안다고 생각했던게 다 착각임을 깨닫고 있다. 포스팅을 정리하면서 내가 제일 많이 배우는 듯.


참고문헌
Authors get paid when people like you upvote their post.
If you enjoyed what you read here, create your account today and start earning FREE STEEM!