이더리움에서 게임을 만든다? 크립토 좀비(2. 좀비가 희생물을 공격한다)

민식킴·2021년 2월 25일
0

크립토 좀비

목록 보기
2/9
사족

5일차
아아 슬슬 어려워진다 그래 그래도 이정돈 되야제


레슨 2

아래의 맛있어 보이는 희생물들..

ch2. 맵핑 mapping (a => b)

솔리디티에서 구조화된 데이터를 저장하는 또다른 방법. (다른 방법은 .push인듯)

  • 쓰는 법 : mapping (key => value) abc
    첫번째 key는 키, 두번째 value는 값을 나타내며 예를들어 'mapping (uint => string) userIdToName'와 같이 쓰인다면 유저번호(uint)로 유저이름(string)을 저장하고 검색할 수 있게 한다.

ch3. name[msg.sender]

솔리디티에서 함수의 실행은 항상 외부호출자가 시작한다. 컨트랙트의 함수를 호출하기 위해선 msg.sender가 꼭 있어야 한다. 만일

mapping (uint => address) public zombieToOwner;
mapping (address => uint) ownerZombieCount;		//이렇게 선언했다면
zombieToOwner[id] = msg.sender;
	//id(uint)를 통해 msg.sender(address)를 저장하겠다는 뜻이며
**ownerZombieCount[msg.sender]++;**
	//저장된 주소(msg.sender)를 통해 ownerZombieCount값을 증가시키겠다는 의미이다.

ch4. require(a == b)

require은 c언어에서의 if문이라고 생각하면 편하다. 괄호 안의 조건이 참이면 함수가 계속되고 참이 아니면 함수를 벗어난다

ch5. 상속 (cat) 'is' (animal)

우리가 c언어에서 함수를 나누듯 컨트랙션도 코드로직을 나눌수 있는데 이를 상속이라고 한다.
예를 들어 A라는 컨트렉트가 코드가 길어져 나누고 싶은 경우 contract B is A{}로 쓰면 된다.

ch6. import "./a.sol"

다수의 파일이 있고 어떤 파일을 다른 파일로 불러오고 싶을 때 사용한다.
이 컨트랙트와 동일한 폴더(./)에 a.sol이라는 파일이 있을 때, 이 파일을 불러온다.

ch7. Storage vs Memory

솔리디티에는 변수를 저장할 수 있는 공간으로 storage와 memory 두 가지가 있다.
Storage는 블록체인 상에 영구적으로 저장되는 변수를 의미하고 Memory는 임시적으로 저장되는 변수로, 컨트랙트 함수에 대한 외부 호출들이 일어나는 사이에 지워진다.
쉽게, Storage는 하드디스크, Memory는 RAM이라고 생각하면 된다.
..아직 이에 대한 이해가 잘 되지는 않는다. 언제 스토리지를 언제 메모리를 쓸지 말이다. 앞으로의 공부에서 이를 숙지할 것이다.
Zombie storage myZombie = zombies[_zombieId];뭐 대충 이렇게 쓰인단댜.


궁금증

  • Storage와 Memory를 꼭 명시해야 하는건가?
    -사실 Storage와 Memory는 명시되어있지 않더라도 솔리디티에서 알아서 설정해주는데 함수 외부에 선언된 변수는 Storage로, 함수 내부 변수들은 알아서 Memory로 선언한다.
    하지만 함수 내에 구조체와 배열을 처리할땐 이 키워드를 사용해야한다.
profile
우리의 꿈, 우리의 희망

0개의 댓글