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를 참고하면 돼요.