[몰라도 해보는 cryptoZombie] Lesson1. 좀비 공장 만들기 - 3

in #kr-dev6 years ago (edited)


https://cryptozombies.io/ko/course

챕터 7: 함수 선언

프로그래밍에서 다루는 일반적인 함수와 같다. 함수를 선언하는 방법은 function으로 시작해서 함수의 이름을 적어주고, ()괄호를 열어 안에 들어갈 parameter 값을 넣어주면 된다. 넣을때는 데이터 타입 parameter이름 순으로 적어 넣는다. 여기서 보면 parameter 이름을 ‘_’ 언더바 로 시작했다.
contract와 struct에 선언된 변수들과 헷갈리게 하지 않기 위해서이다. 이름을 저렇게 짓지 않아도 프로그램은 돌아가나 가독성을 위해서 이런 명명 규칙은 따르는 것이 좋다고 생각한다.

만든 함수를 사용하고 싶을 때 호출하는 법에 대해서는 크립토좀비에서 잘설명하고 있으니 생략한다. (사실 대부분 내용을 잘 설명하고 있기 때문에 내가 붙이는 건 대부분 사족이다.)

시키는 대로 함수를 만들면 다음과 같다.

function createZombie(string _name, uint _dna) {
                       // 내용은 아직 비어있다
}

이건 좀비를 만드는 함수다. 어떤 작동을 하는지 내용은 아직 비어있지만 확실한 건, _name과 _dna… 즉, 이름과 DNA 정보를 입력 받는 함수라는 것이다. 왜 이름과 DNA가 필요하냐고 물어본다면 struct로 시작하는 코드를 다시 보면 좋을 것 같다. Zombie라는 구조체는 이름과 dna를 받는다. 결국 createZombie라는 함수는 _name과 _dna를 입력받아 Zombie 구조체에 넘기는 역할을 하게 될 것을 예측할 수 있다.

챕터 8: 구조체와 배열 활용하기

봐라, 바로 함수를 이용해서 구조체를 만드는 내용을 다룬다.

sturct로 Zombie라는 구조체를 정의했고, 이어 Zombie[] public zombies; 를 통해서
zombies라는 구조체 배열을 만들었다. 동적 배열로 만들었으며 지금 안은 텅텅 비어있다. (동적 배열이 뭔소리인가 싶다면 구글! 아니면 이전 포스팅을 보고 와도 좋다 )

아무튼 배열(array)를 다루는게 익숙치 않다면 조금 불편할 수 있다. 배열 안에 새로운 값을 넣는 방법은 다양하다. 여기서는 배열의 맨 끝에 밀어 넣는 방법을 썼다. 이때 쓰는 명령어가 push() 이다.
지시사항대로 코드를 쳐보면…

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

이렇게 된다.
zombies라는 배열에 push().. 그러니까 ‘괄호 안에 있는 애를 집어 넣어라’ 라는 의미이다.
그래서 createZombie를 실행하게되면, _name과 _dna를 인자로 받고, 이 인자로 받은 값은 Zombie 구조체를 생성해 zombies 배열 안으로 들어간다. 그렇게 createZombie를 실행할 때마다 좀비가 한마리씩 만들어지게 된다.

챕터 9: Private/ Public 함수

지난번에 아무나 가져다 쓰게 하고 싶으면 public을 써주면 된다고 하고 대충 넘어갔던 부분이 여기 다시 튀어나온다.
다른 애들이 못가져다 쓰게하고 싶으면 private
아무나 가져다 쓰게 해주고 싶으면 public이다.
Solidity의 함수 선언은 기본적으로 public이기 때문에 아무나 못쓰게하고 싶으면 함수 선언 마지막에 private을 써줘야한다.

public과 private은 contract를 기준으로 돌아가는 개념이다. 위의 예제에서 private을 선언한 함수가 있다고하면 그 함수는 Zombiefactroy라는 contract 안에서만 사용할 수 있다. public이라면? Zombiefactory말고 다른 contract에서도 가져다 쓰고 싶으면 가져다 쓸 수 있다는 말이다.

좀비를 만드는데 좀비공장에서만 만들어야지 아무데서나 좀비가 만들어지면 안된다. 그러니까 private 선언을 해주자.
기존에 썼던 함수 선언 뒤에 private만 붙여주면 된다. ( 아, 그리고 하나 빼먹었다. private 함수의 경우 함수명 앞에 _ 를 붙여준다. 그래서 createZombie도 private이 되면 _createZombie라고 해줘야한다.. 이건 사람들끼리 정한 약속이니까 지켜주자. 안지켜도 컴퓨터는 알아듣지만..)

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

참 쉽다!

정리

  • 챕터 7: 함수 선언 – 일반 프로그래밍이랑 다를바 없다. 명명법만 신경쓰자. 함수에 선언하는 parameter 이름 앞에 ‘_’ 를 붙인다. (ex. _name)

  • 챕터 8: 구조체와 배열 활용하기 – 구조체를 선언하고 생성해 보는건 지난 번에 다루었다. 여기서는 그걸 배열과 섞어서 다뤄보는데 배열이 익숙하다면 별거아니네 하고 넘어갈수 있다. 배열이 익숙치 않다면.. javascript array라고 google에 검색해서 공부를 살짝만 하면 될 것 같다. push()만 알면 이번 챕터를 쉽게 넘어갈 수 있다.

  • 챕터 9: private/ public 함수 선언 – 이해하면 별거아니고 이해못하면 뭐하는건지 모르겠는 private과 public 선언.
    아무나 써도 된다 = public , 나만 써야된다 = private
    물론 여기서 말하는 나나 아무나는 전부 contract를 의미한다.


참고문헌
https://d2fault.github.io/2018/03/19/20180319-about-solidity-1/
코어 이더리움 프로그래밍 – 박재현, 오재훈, 박혜영

Sort:  

저 놀러왔어요...보팅도하구갑니당

감사합니다~!! ㅎㅎ

응원합니다!!
시리즈물일 경우 kr-series 태그를 달아보세요.
화이트리스트에 포함되면 @joceo00님이 보팅 해주실수도 있습니다.
(요즘은 무조건 보팅은 아니라고 들었습니다. 하지만 도전!)

응원 감사합니다!! 좋은정보 감사합니다 ㅎㅎ

게임 리뷰인줄 알고 잠깐 들어왔다가...(쿨럭)

어쨌든 잘 보고 갑니다ㅎㅎ

ㅎㅎ 게임같이 생기기는 했죠...? 감사합니다 : )

날이 너무 덥습니다......덥다 ㅠ

그쵸.. 그래도 오늘은 소나기가 와서 조금 나은것 같아요 ㅎㅎ

완성되면 재밌겠네요

Coin Marketplace

STEEM 0.24
TRX 0.11
JST 0.031
BTC 61875.79
ETH 3013.13
USDT 1.00
SBD 3.69