mapping 읽기·쓰기
mapping 의 값을 다루는 방법은 배열 의 인덱스 접근과 비슷합니다.
대괄호 [] 안에 key 를 넣어 value 를 읽거나 씁니다. 별도의 "추가/삭제" 메서드가 없고,
대입과 delete 만으로 모든 조작을 합니다.
값 쓰기
mapping[키] = 값 형태로 대입합니다. 산술 대입 연산자도 그대로 쓸 수 있습니다.
balances[msg.sender] = 100; // 대입
balances[msg.sender] += 50; // 누적 (기존 값 + 50)값 읽기
uint256 my = balances[msg.sender]; // 값 가져오기넣은 적 없는 key 를 읽어도 오류가 나지 않습니다. 해당 value 타입의 기본값(uint 은 0,
bool 은 false, address 는 0 주소)이 반환됩니다. 그래서 balances[처음보는주소] += 50 은 0 + 50 으로 계산되어 정상 동작합니다.
값 삭제
delete 키워드는 해당 key 의 value 를 기본값으로 되돌립니다. key 자체가 사라지는 것이
아니라 값이 초기화될 뿐입니다(mapping 은 어차피 키 목록을 갖지 않습니다).
delete balances[msg.sender]; // balances[msg.sender] 가 0 이 됨종합 예시
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.20;
contract Ledger {
mapping(address => uint256) public balances;
function deposit(uint256 amount) public {
balances[msg.sender] += amount;
}
function balanceOf(address user) public view returns (uint256) {
return balances[user];
}
}값을 "0 인지 아닌지"로 판단해 등록 여부를 가늠하는 패턴이 흔합니다. 하지만 의도적으로 0 을 저장한
경우와 구분이 안 되므로, 정확한 존재 여부가 필요하면 mapping(address => bool) 을 따로 두세요.