break와 continue
반복문은 보통 끝까지 돌지만, 때로는 중간에 멈추거나 특정 회차만 건너뛰고 싶을 때가 있습니다. 이때 break 와 continue 를 쓰면 반복문의 흐름을 한층 세밀하게 다룰 수 있습니다.
반복을 즉시 끝내는 break
break 는 반복문을 즉시 완전히 종료 하고 빠져나옵니다. 원하는 값을 찾았거나 더 이상 반복할 필요가 없을 때 유용합니다. 블록체인에서는 불필요한 반복을 일찍 끊어 gas 를 아끼는 효과도 있습니다.
현재 회차만 건너뛰는 continue
continue 는 현재 반복만 건너뛰고 다음 반복으로 넘어갑니다. 본문 아래쪽 코드는 실행하지 않은 채 곧바로 증감/조건 검사 단계로 이동합니다.
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.20;
contract BreakContinueExample {
// 0부터 시작해 target 을 처음 만나면 멈추고, 그때까지 센 횟수를 반환합니다.
function findIndex(uint256 target) public pure returns (uint256) {
uint256 i = 0;
for (i = 0; i < 100; i++) {
if (i == target) {
break; // 찾았으면 반복 종료
}
}
return i;
}
// 0부터 n까지 중 짝수만 더합니다.
function sumEven(uint256 n) public pure returns (uint256) {
uint256 total = 0;
for (uint256 i = 0; i <= n; i++) {
if (i % 2 != 0) {
continue; // 홀수는 건너뜀
}
total += i;
}
return total;
}
}break 와 continue 는 가장 가까운(자신을 감싼) 하나의 반복문에만 적용됩니다. 중첩
반복문에서 바깥 루프까지 한 번에 빠져나오지는 못합니다.
적절한 break 는 가스를 아끼지만, continue 를 남발해 검사만 반복하면 오히려 가스를 낭비할 수 있습니다. 가능하면 조건 자체를 정교하게 설계하는 편이 효율적입니다.