mapping은 키,value(값:데이터 타입)저장소로. 데이터를 저장하거나 검색하는데 이용한다.
매핑 선언 구문 :
mapping(key=>value)매핑선언이름
예) mapping( string => uint ) test;
일단 저장먼저.
매핑은 솔리디티에서 데이터를 저장하는 또 다른 방법이다.
파이선의 해싱에서 해시함수와 비슷한 개념으로, 키 값과 발유 값을 저장하는 함수로써 그 값들의 데이터 타입을 먼저 선언해 둔 것이다.
예를들어 학생 출석부를 만들고 싶을때 출석부를 만들 테이블을 먼저 만들어 놓는 느낌이다.
쿼리문이랑도 비슷한 것 같다. CREATE문이랑 SELECT WHERE문을 같이 사용할 수 있는 함수느낌?
아래 테이블을 생성한다고 할때 :
studentNum(INT) | studentName(STRING) |
1 | 유명 |
2 | 무명 |
3 | 우멍 |
쿼리문으로 작성시 -
CREATE TABLE studentTable (studentNum INT, studentName STRING);
mapping 으로 작성시 -
mapping ( uint => string ) studentTable;
이것또한 public과 private으로 오픈여부를 결정할 수 있다.
테이블에 키값과 발유값들을 넣을때 :
쿼리문으로 작성시 -
INSERT INTO studentTable (studentNum,studentName) VALUES (1,"유명");
mapping으로 작성시 -
studentTable[1] = "유명";
테이블에서 키값으로 발유값을 가지고 올때 :
쿼리문으로 작성시 -
SELECT studentName FROM studentTable WHERE studentNum=3;
// return값 : "우멍"
mapping으로 작성시 -
studentTable[1];
// return값 : "유명"
이렇게 테이블을 만들었고 만약 학생번호 2의 이름을 바꾸고 싶다면 이 테이블 전체를 다시 짜야하는데 mapping을 사용한다면 특정 번호를 지적해서 바꾸는게 가능하다.
이제 크립토 좀비의 Lession2, 챕터3를 기준으로 문제를 풀어보자.
mapping (uint => address) public zombieToOwner;
mapping (address => uint) ownerZombieCount;
일단 나에게는 두가지 mapping, 위의 글로 보자면 두가지의 table(또는 객체)이 있다.
일단 내 아이디를 구하는 함수를 만든다.
function _createZombie(string _name, uint _dna) private {
uint id = zombies.push(Zombie(_name, _dna)) - 1;
// 여기서 시작
NewZombie(id, _name, _dna);
}
이 함수에서 mapping으로 키값에는 id를, address값에는 내 현재 주소를 넣어보자.
솔리디티에는 모든 함수에서 사용할 수 있는 전역 변수들이 있는데 그중에 하나가 msg.sender이다.
msg.sender는 현재 함수를 호출한 사람이나 스마트 컨트렉터의 주소를 가리킨다.
그럼 이 msg.sender를 통해 내 주소를 알아냈으니 mapping으로 ZombieToOwner에 저장해보자.
ZombieToOwner[id] = msg.sender;
Query문으로 친다면 INSERT INTO ZombieToOwner (id,address) VALUES (id,msg.sender);
그 다음 저장된 주소(msg.sender)를 고려해서 ownerZombieCount를 증가시킨다.
일단 mapping으로 현재 주소의 count값을 가지고 온다.
ownerZombieCount[msg.sender];
query로 쳤을때는 SELECT int FROM ownerZombieCount WHERE address=msg.sender;
그럼 이제 증가시켜주기위해 ++를 사용한다.
ownerZombieCount[msg.sender]++;
'Solidity' 카테고리의 다른 글
[크립토 좀비] 솔리디티 openzeppelin (0) | 2021.11.30 |
---|---|
[ 솔리디티 이더리움, 크립토좀비 ] 컨트렉스 상호작용, 인터페이스 (0) | 2021.10.11 |
솔리디티 크립토좀비 푸는 중 (0) | 2021.10.09 |
[ 솔리디티 이더리움 , 크립토좀비 ] requirea문 (0) | 2021.10.08 |
[ 솔리디티 이더리움 , 크립토좀비 ] 변수,배열,함수 선언 (0) | 2021.10.08 |