for 반복문

for statement

시작하기에 앞서 한 가지 중요한 사실을 미리 밝히고 넘어가자.

Go에는 while이 없다! 반복문은 for 하나로 모두 작성한다.


for 반복문의 작성 규칙은 아래와 같다.

ForStmt = "for" [ Condition | ForClause | RangeClause ] Block .

while이 없는 대신 for 자체가 이렇게도, 저렇게도 사용할 수 있도록 돼 있다. RangeClause는 아직 다루지 않은 배열, 슬라이스, 맵이나 채널 등과 같이 사용하니 일단은 미뤄두도록 하자.1

while 처럼 사용하기

for 뒤에 참/거짓을 판별할 수 있는 Condition을 써 while처럼 사용할 수 있다.

for a < b {
	a *= 2
}

for 처럼 사용하기

‘for를 for 처럼 사용한다는게 무슨 소린가?’ 하겠지만, 다른 언어, 특히 C/C++의 for처럼 사용한다는 의미이다. 작성 규칙 중에서는 ForClause에 해당한다.

ForClause = [ InitStmt ] ";" [ Condition ] ";" [ PostStmt ] .

대충 봐도 익히 알고 있는 그 for 반복문이다.

for i := 0; i < 10; i++ {
	f(i)
}

InitStmt, Condition, PostStmt는 모두 필수 요소가 아니기 때문에 삭제할 수 있다. 하지만 구분을 위해 들어가는 세미콜론은 반드시 써야 하는데, Condition만 쓴 경우는 위 while 처럼 사용하기와 같은 사용법이기 때문에 세미콜론을 삭제할 수 있다. 즉, 다음 코드들은 같은 의미이다.

// case 1
for ; i < 10; {
	f(i)
}

// case 2
for i < 10 {
	f(i)
}

무한루프

for 문 작성 규칙을 다시 보면 Condition, ForClause, RangeClause가 모두 선택사항이다. 즉, for 뒤에 아무것도 쓰지 않을 수도 있다. 또, for 처럼 사용하기에서 ForClause를 봐도 InitStmt, Condition, PostStmt를 모두 쓰지 않고 세미콜론만 두 개 쓸 수도 있다. 이 두 경우는 같은 의미로 Condition 자리에 true가 있는 것으로 처리된다.

어디서 비슷한 것을 본 것 같지 않은가? 바로 switch 조건문에서 switch 뒤 Expression을 생략했을 때와 같은 처리 방식이다. 관련 내용은 이 글을 참조하라.

아래 코드들은 모두 무한루프를 만드는 방법이다.

for true {
	...
}

for ; true; {
	...
}

for ; ; {
	...
}

for {
	...
}

  1. 점점 빚이 늘어나는 것 같은 심적 부담이… [return]