storage์ memory๋ค! ์ฌ๊ธฐ์ ์ ๋๋ก ์ค๋ช
ํด์ค๋ค. Storage๋ ์๊ตฌ์ ์ผ๋ก ๋ธ๋ก์ฒด์ธ ์์ ๊ธฐ๋ก, memory๋ ์์ ์ ์ฅ์ด๋ผ๊ณ ์๊ฐํ๋ฉด ๋๋ค. Storage๋ ํ๋๋์คํฌ, memory๋ ram์ ๋น์ ํ๋๋ฐ ์ ์ ํ ๋น์ ๋ผ๊ณ ์๊ฐํ๋ค.
์ผ๋ฐ์ ์ผ๋ก solidity์์ ์์์ ์ฒ๋ฆฌํด์ฃผ์ง๋ง ๊ตฌ์กฐ์ฒด(struct)์ ๋ฐฐ์ด์ ๋ค๋ฃฐ ๋๋ storage์ memory์ ์ ์ธ์ด ํ์ํ๋ค. ์ง๊ธ์ ์ ์ธํ๋ ๋ฐฉ์๊ณผ ์ด๋ฐ๊ฒ ์๊ตฌ๋๋ง ์๋ฉด ๋ ๋ฏ.
์๊ตฌ์ฌํญ๋๋ก ์์ฑํ๋ฉด ๋ค์๊ณผ ๊ฐ๋ค.
pragma solidity ^0.4.19;
import "./zombiefactory.sol";
contract ZombieFeeding is ZombieFactory {
function feedAndMultiply(uint _zombieId, uint _targetDna) public {
require(msg.sender == zombieToOwner[_zombieId]);
Zombie storage myZombie = zombies[_zombieId];
}
}
์ฌํ ๋ค๋ฃจ์๋ ๋ด์ฉ์ ์ด์งํฉ ๊ฐ๋ค. ํจ์์ public ์ ์ธ, require ๊ตฌ๋ฌธ, ๊ตฌ์กฐ์ฒด ์ ์ธ๊ณผ ๋์ . ์ถ๊ฐ๋๋ถ๋ถ์ storage์ myZombie๋ฅผ ์๊ธด๋ค๋ ๊ฒ! Zobie๋ผ๋ struct ๋ณ์๋ฅผ ์ ์ธํ๊ณ ๊ทธ ์์ zombies ๋ฐฐ์ด์ _zombieId ์ ์๋ ๋ฐ์ดํฐ๋ฅผ ๋ฃ๋๋ค.
์ด์ ์ข๋น๊ฐ ๋๊ตฐ๊ฐ๋ฅผ ๋ฌผ์์๋ ์ข๋น๋ก ๋ณํ๋ ๋ ์์ DNA๋ฅผ ๊ตฌํํด ๋ณธ๋ค. ํฌ๋ฆฝํ ์ข๋น์์๋ ๋ด ์ข๋น DNA์ ๋จน์ด์ DNA์ ํ๊ท ๊ฐ์ด ์๋ก์ด ์ข๋น์ DNA๊ฐ์ด ๋๊ฒ๋ ์ ํ๋ค.
function feedAndMultiply(uint _zombieId, uint _targetDna) public {
require(msg.sender == zombieToOwner[_zombieId]);
Zombie storage myZombie = zombies[_zombieId];
_targetDna = _targetDna % dnaModulus;
uint newDna = (myZombie.dna + _targetDna) / 2;
_createZombie("NoName", newDna);
}
feedAndMultiply ํจ์๋ฅผ ์์ฑํด ๋ณด๋ฉด ์์ ๊ฐ๋ค. ๋จผ์ _targetDna๋ฅผ 16์๋ฆฌ๋ง ๋จ๋๋ก ์ ๋ฆฌํด์ฃผ๊ณ , ์๋ก์ด dna๋ฅผ newDna๋ก ์ ์ธํ๊ณ ๊ณ์ฐํด ๊ฐ์ ์ฑ์๋ฃ๋๋ค. ๊ทธ ๋ค์ _createZombie ํจ์๋ฅผ ํธ์ถํด ์๋ก์ด ์ข๋น๋ฅผ ๋ง๋ ๋ค.
๊ฐ๋ง.. ๊ทธ๋ฐ๋ฐ _createZombieํจ์๋ private ์ ์ธ์ ํด๋์ง ์์๋? ์ด๋ ๊ฒ ํธ์ถํด์ ์จ๋ ์๋ํ๋๊ฑฐ์ผ???
์๋ฌธ์ ํ์๋ง์ ํฌ๋ฆฝํ ์ข๋น๊ฐ private ์ ์ธ์ ํด๋จ๊ธฐ ๋๋ฌธ์ ์์์ ์ฒ๋ผ ์ฐ๋ฉด ์๋๋ค๊ณ ๊ฐ๋ฅด์ณ์ค๋ค. ๊ทธ๋์ ์๋ก์ด ์ ๊ทผ ์ ์ด์์ธ internal๊ณผ external์ ๋ฐฐ์ฐ๋๋ฐ.. ์ฐ๋ฆฌ๊ฐ ์ฐ๋ ํจ์ ์ ๊ทผ ์ ์ด์๋ฅผ ์ ๋ฆฌํ๋ฉด ๋ค์๊ณผ ๊ฐ๋ค.
์ํ. ๊ทธ๋ฌ๋ฉด _createZombie์ ์ ์ธ๋ private์ internal๋ก ๋ฐ๊ฟ์ฃผ๋ฉด zombiefeeding ์ปจํธ๋ํธ์์๋ _createZombie๋ฅผ ์ฌ์ฉํ ์ ์๋ค. (์๋๋ฉด zombiefeeding ์ปจํธ๋ํธ๋ zombiefactory ์ปจํธ๋ํธ๋ฅผ ์์ํ๋๊น!)
function _createZombie(string _name, uint _dna) internal {
uint id = zombies.push(Zombie(_name, _dna)) - 1;
zombieToOwner[id] = msg.sender;
ownerZombieCount[msg.sender]++;
NewZombie(id, _name, _dna);
}
์ฐธ๊ณ ๋ฌธํ
https://d2fault.github.io/2018/03/19/20180319-about-solidity-1/
์ฝ์ด ์ด๋๋ฆฌ์ ํ๋ก๊ทธ๋๋ฐ โ ๋ฐ์ฌํ, ์ค์ฌํ, ๋ฐํ์