블록체인 학습
0 XP

반복문: for

같은 작업을 정해진 횟수만큼 반복할 때 for 반복문 을 사용합니다. 배열의 모든 요소를 순회하거나, 1부터 n까지 합을 구하는 것처럼 "몇 번 반복할지" 가 비교적 명확한 상황에 적합합니다.

for 문의 초기화, 조건, 증감

for 문은 세미콜론으로 구분된 세 부분으로 구성됩니다.

for (초기화; 조건; 증감) {
    // 반복할 코드
}
  • 초기화: 반복을 시작할 때 한 번만 실행 (예: uint256 i = 0)
  • 조건: 매 반복 직전에 검사, true 이면 본문 실행 (예: i < n)
  • 증감: 매 반복이 끝날 때마다 실행 (예: i++)
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.20;
 
contract SumExample {
    // 1부터 n까지의 합을 계산합니다.
    function sumTo(uint256 n) public pure returns (uint256) {
        uint256 total = 0;
        for (uint256 i = 1; i <= n; i++) {
            total += i;
        }
        return total;
    }
}

반복문과 가스(gas) 비용

블록체인에서 반복문은 특별히 조심해야 합니다. EVM 에서는 모든 연산이 gas 를 소모하는데, 반복 본문이 한 번 돌 때마다 그만큼 가스가 쌓입니다.

그래서 반복 횟수가 많을수록 트랜잭션 비용이 커지고, 결국 가스 한도를 넘으면 트랜잭션 전체가 실패 합니다. 특히 길이를 예측할 수 없는 배열을 끝까지 순회하는 루프는 위험합니다.

여기서 가스 한도는 두 가지로 나뉩니다.

  • 트랜잭션 gas limit: 한 트랜잭션이 쓸 수 있는 상한으로, 트랜잭션을 보내는 발신자가 직접 정합니다.
  • block gas limit: 한 블록 전체가 담을 수 있는 가스 총량입니다. 트랜잭션 하나가 이 값을 넘게 설정될 수는 없으므로, 사실상 트랜잭션 한도의 상한 역할을 합니다.

반복 횟수가 사용자 입력이나 배열 길이에 따라 무한정 커질 수 있는 루프 는 피하세요. 실행 도중 가스를 다 써 버리면 revert 가 아니라 out-of-gas 예외 가 발생합니다. 둘 다 상태 변경은 되돌아가지만, revert 는 남은 가스를 돌려주는 반면 out-of-gas 는 보낸 가스를 전부 소진 한다는 점이 다릅니다.

실무에서는 반복 횟수에 상한선을 두거나, 큰 작업을 여러 트랜잭션으로 나누는 패턴을 자주 씁니다.

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

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