블록체인 학습
0 XP

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 만으로는 불가능합니다. 이 한계는 뒤에서 자세히 다룹니다.

Code Editor
에디터를 불러오는 중...
실행 결과

Run 버튼을 눌러 코드를 실행하세요.