mapping이란?
mapping 은 키(key) 를 값(value) 에 연결해 저장하는 자료구조입니다.
다른 언어의 해시맵(hash map)이나 딕셔너리(dictionary)와 비슷하다고 생각하면 됩니다.
"주소마다 잔액이 얼마인가?", "토큰 ID 마다 소유자가 누구인가?" 처럼 무언가를 무언가에 대응시켜
저장할 때 사용하며, 스마트 컨트랙트에서 가장 자주 쓰이는 핵심 자료구조입니다.
배열 대신 mapping 을 쓰는 이유
배열 만으로 "특정 주소의 잔액"을 찾으려면 처음부터 끝까지 훑어야 합니다. 데이터가 많아질수록
가스 비용이 늘고 느려집니다.
mapping 은 key 로 한 번에 value 위치를 계산해 찾아오므로 이런 순회가 필요 없고, 저장된
데이터가 아무리 많아도 조회 속도가 일정합니다. "이름표(key)로 사물함(value)을 바로 여는 것" 과
같습니다.
주소와 잔액을 잇는 mapping
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.20;
contract BalanceBook {
// 주소(address) → 잔액(uint256) 으로 연결하는 mapping
mapping(address => uint256) public balances;
}위 balances 는 "어떤 주소의 잔액은 얼마인가" 를 저장합니다.
한 번도 값을 넣지 않은 key 를 조회해도 오류가 나지 않고, 그 value 타입의
기본값(uint256 이면 0)이 돌아옵니다.
mapping 은 어떤 key 들이 저장됐는지 목록을 보관하지 않습니다. 따라서 전체 키를 순회하거나
"몇 개나 들어있는지" 세는 것이 mapping 만으로는 불가능합니다. 이 한계는 뒤에서 자세히
다룹니다.