블록체인 학습
0 XP

동적 배열

앞 강의의 정적 배열은 크기가 고정되어 있어, 실행 중에 데이터가 몇 개 들어올지 모르는 상황에는 쓰기 어렵습니다. 사용자가 등록하는 주소 목록이나 계속 쌓이는 점수처럼 개수가 수시로 변하는 데이터에는 동적 배열(dynamic array)을 씁니다.

크기를 미리 정하지 않는 배열

동적 배열은 크기를 미리 정하지 않는 배열입니다. 선언 형식은 타입[] 처럼 대괄호 안을 비워 둡니다. 처음에는 길이가 0인 빈 배열로 시작하고, 실행 중에 요소를 추가하거나 제거하면서 length가 자유롭게 바뀝니다.

// SPDX-License-Identifier: MIT
pragma solidity ^0.8.20;
 
contract DynamicArray {
    // 빈 동적 배열 (처음 length는 0)
    uint256[] public values;
 
    // 끝에 요소 추가 → length가 1씩 증가
    function add(uint256 value) public {
        values.push(value);
    }
 
    // 현재 길이
    function count() public view returns (uint256) {
        return values.length;
    }
}

public 배열의 자동 getter

상태 변수를 public으로 선언하면 Solidity가 읽기용 getter를 자동 생성합니다. 배열의 경우 getter는 인덱스를 인자로 받는 형태가 됩니다.

public으로 선언한 배열 values의 getter는 values(0) 처럼 호출하며, 0번 요소를 돌려줍니다. 다만 이 자동 getter는 요소 하나만 반환할 뿐, 배열 전체를 한 번에 돌려주지는 않습니다.

정적 배열과의 비교

구분정적 배열 uint256[3]동적 배열 uint256[]
길이고정 (불변)가변
push / pop불가가능
적합한 상황개수가 정해진 데이터개수가 변하는 목록

동적 배열은 길이가 무한정 커질 수 있어, 전체를 순회하는 반복문은 요소 수에 비례해 가스가 늘어납니다. 대량 데이터를 다룰 때는 가스 한도를 항상 염두에 두어야 합니다.

이렇게 동적 배열은 길이가 자유롭기 때문에 주소 목록, 점수 목록처럼 계속 늘어나는 데이터에 잘 맞습니다.

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

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