Gidhub BE Developer

맵핑(Mapping) (중요)

2018-02-26
goodGid

맵핑(Mapping)

맵핑은 특별한 자료형으로

배열이 대괄호 안에서

0,1,2, …의 [ 색인(index),데이터 ]의 쌍이라고 한다면,

맵핑[ 키(key), 데이터 ]의 쌍이라고 할 수 있다.

정수형뿐 아니라 주소형도 사용할 수 있다.

맵핑은 상태 변수로만 사용이 가능하며

지역 변수로 사용 시 참조하게 된다.

         키 자료형               맵핑 이름
mapping (key type => data type) name
                      데이터 자료형

맵핑은 키와 데이터를 이용하여

선언, 접근, 대입이 가능하다.


1 pragma solidity ^0.4.8; 
2 
3 contract Example4 {
4     mapping (address => uint) public balances;
5
6     function setBalance (uint input) {
7         balances[msg.sender] = input;
8     }
9 }

위 예제에서 msg.sender컨트랙트를 실행시킨 사람의 주소를 의미한다.

7행에서 setBalance 함수를 실행하면

msg.sender와 입력받은 input으로 [키, 데이터] 쌍을 만들어

맵핑 balances에 삽입한다.

이미 있다면, 기존 데이터를 input으로 대체하게 된다.


맵핑의 키에는

맵핑, 동적 배열, 스마트 컨트랙트, 구조체를 제외한 모든 자료형을 사용할 수 있다.

맵핑의 값

맵핑을 포함한 모든 자료형을 사용할 수 있다.


4행처럼 맵핑public 키워드를 붙이면

자동으로 값을 반환할 수 있는 함수(getter)가 되는데,

맵핑의 getter는 조금 어렵다.


이 함수는 매개 변수로 원래 맵핑의 키의 자료형을 따르고

반환할 때값의 자료형을 따르게 된다.

만약 반환 값이 또 맵핑이면

getter는 입력 매개변수가 2개 이상이 될 수 있고,

각 키에 해당하는 자료형을 따른다.


맵핑해시에 의해 암호화되는 해시 테이블이라고 할 수 있다.

다만 맵핑에 키의 본래 값이 저장되지 않고

대신에 키의 해시 값이 저장되는 차이점이 있다.

그래서 맵핑의 길이를 조회할 수 없으며

for문과 같은 반복문 사용이 불가능하다.


Comments

Content