continue 문
continue 문 (Continue statements)
반복문을 돌다 보면, 어떤 조건이 맞았을 때 남은 처리를 건너뛰고 바로 다음 반복으로 넘어가고 싶을 때가 있어요. 그럴 때 쓰는 게 바로 continue 문이에요. 가까운 위치의 for 루프가 아니라, 겉에 있는 루프를 대상으로 하고 싶을 땐 레이블을 써서 가리킬 수도 있죠. 지금부터 그 동작 방식을 정확하게 정리해 볼게요.
출처: Go Specification
본문
continue 문은 가장 안쪽에 있는 둘러싼 "for" 루프의 다음 반복을 시작해요. 제어 흐름을 루프 블록의 끝으로 넘기면서요. 이때 그 "for" 루프는 반드시 같은 함수 안에 있어야 해요.
EBNF로는 이렇게 생겼어요.
ContinueStmt = "continue" [ Label ] .
만약 레이블이 붙어 있다면, 그 레이블은 반드시 자신을 둘러싼 "for" 문의 것이어야 하고, 실행이 진행되는 것도 바로 그 루프예요. 즉 레이블이 없으면 가장 안쪽 루프의 다음 반복으로 가고, 레이블이 있으면 그 레이블이 붙은 루프의 다음 반복으로 가는 거죠.
레이블이 쓰인 실제 예시를 볼게요.
RowLoop:
for y, row := range rows {
for x, data := range row {
if data == endOfRow {
continue RowLoop
}
row[x] = data + bias(x, y)
}
}
여기서 안쪽 루프를 돌다 data == endOfRow를 만나면 continue RowLoop로 바깥 루프인 RowLoop의 다음 반복으로 바로 넘어가요. 그래서 안쪽 루프에 남은 열은 처리하지 않고, 다음 행(y)으로 이동하게 되는 거예요.
더 알아보기
- 레이블 없이
continue만 쓰면 가장 안쪽 루프의 다음 반복으로 갑니다. 바깥 루프를 건너뛰고 싶을 때만 레이블을 붙여요. continue가 가리키는"for"루프는 항상 같은 함수 안에 있어야 해요. 함수 경계를 넘어서는 제어 이동은 허용되지 않아요.- 루프에서 탈출하고 싶을 때는
break문을 써요 —continue는 "다음 반복으로",break는 "루프 밖으로" 이 두 가지를 구분해서 기억해 두면 헷갈리지 않아요. 관련 문법은 Break statements를 참고하면 돼요.