블록체인 학습
0 XP

push로 요소 추가하기

동적 배열의 가장 큰 장점은 실행 중에 길이를 늘릴 수 있다는 점입니다. 배열의 끝에 새 요소를 붙일 때 사용하는 함수가 바로 push 입니다.

push의 동작

push는 배열의 맨 뒤에 값을 붙이고, 배열의 length를 1 늘립니다. 호출할 때마다 칸이 하나씩 늘어나며 그 자리에 새 값이 채워집니다.

// SPDX-License-Identifier: MIT
pragma solidity ^0.8.20;
 
contract PushExample {
    uint256[] public numbers; // 처음 length는 0
 
    function addNumber(uint256 value) public {
        numbers.push(value); // 맨 뒤에 value 추가, length += 1
    }
 
    // 방금 추가한 마지막 요소 읽기
    function last() public view returns (uint256) {
        return numbers[numbers.length - 1];
    }
}

numbers가 비어 있을 때 addNumber(7)을 호출하면 배열은 [7](length 1)이 되고, 다시 addNumber(9)를 호출하면 [7, 9](length 2)가 됩니다.

인자 없는 push

push()를 인자 없이 호출하면 해당 타입의 기본값(uint은 0) 요소가 끝에 추가됩니다. 빈 칸을 먼저 만들어 두고 나중에 인덱스로 값을 채우는 패턴에서 유용합니다.

numbers.push();          // [.., 0] 기본값 추가
numbers[numbers.length - 1] = 42; // 추가한 칸을 42로 채움

정적 배열에는 push를 쓸 수 없습니다. 길이가 고정되어 있어 칸을 늘릴 수 없기 때문입니다. push는 오직 storage의 동적 배열에서만 동작합니다.

push는 storage에 새 데이터를 기록하므로 가스 비용이 발생합니다. 반복문 안에서 수없이 호출하면 가스가 빠르게 누적되니 주의하세요.

정리하면 push(value)는 끝에 값을 더하고, push()는 기본값 칸을 더하며, 두 경우 모두 length가 1 늘어납니다.

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

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