chapter 11
에서는 Go 언어에서 for 반목문을 통해 어떤식으로 같은 행동을 반복할 수 있는지에 대해서 설명한다.
for 문의 동작 원리
for 문의 활용 형태
break와 continue
중첩 for문
for
, while
, do-while
등 여러 형태의 반복문을 지원하지만, Go언어 에서는 for 반복문 하나를 여러가지 형태로 제공한다. for 초기문; 조건문; 후처리 {
코드 블록
}
for
문이 실행되면, 초기문
부터 실행된다.조건문
을 검사하여 만약 조건문
이 true
를 반환한다면, 내부의 코드 블록
을 실행한다. 그리고 만약 false
를 반환한다면, 반복문의 수행을 종료한다.코드 블록
를 실행한 뒤 후처리
를 실행하고, 2번으로 넘어간다.초기문
을 생략한 형태의 for 문을 사용할 수 있다.;
를 생략해서는 안된다. 이는 조건문
의 위치를 컴파일러에게 알려주기 위함이다. for ; 조건문; 후처리 {
코드 블록
}
후처리
를 생략한 형태의 for 문을 사용할 수 있다.;
를 생략해서는 안된다. for 초기문; 조건문; {
코드 블록
}
while
문과 유사한 형태로 ;
과 조건문
만을 통해 코드 블록
을 반복 수행할 수 있다. for ; 조건문; {
코드 블록
}
while
문 처럼 활용할 수 있도록 ;
를 생략해도 좋다.for 조건문 {
코드 블록
}
true
가 된 형태로, 내부의 코드 블록
을 무한히 반복한다. for true {
코드 블록
}
for {
코드 블록
}
break
와 continue
키워드를 제공한다.if
문과 같은 흐름제어문과 함께 사용된다.break
: 코드 블록
을 수행하다가 break
를 만나면 곧 바로 해당 for 반복문의 수행을 중단하고, 빠져나온다.continue
: 코드 블록
을 수행하다가 continue
를 만나면 곧 바로 후처리
를 수행하고, 다시 조건문
검사를 통해 계속해서 반복문을 수행한다. if
문과 마찬가지로, 반복문 안에 또 다른 로직을 수행하는 다른 반목문을 추가하고 싶을 때, 중첩해서 for 문을 수행할 수 있다.package main
import "fmt"
func main() {
for i := 0; i < 3; i++ {
for j := 0; j < 5; j++ {
fmt.Print("*")
}
fmt.Println()
}
}
break
와 continue
를 적절히 사용할 수 있다.flag
용 변수를 만들어서 해당 변수와 if 문
을 통해 다시 외부의 for 문을 빠져나와야 한다.flag
용 변수를 새로이 선언하고, 여러 for 문을 빠져나오고 싶다면, 미리 for 문에 label
을 정해 놓고, 해당 label
에 대하여 break
를 수행해주면 된다.OuterFor
에 대하여 break
를 수행해주면, label
에 최상위 for문까지 수행을 종료할 수 있다.package main
import "fmt"
func main() {
a := 1
b := 1
OuterFor:
for ; a <= 9; a++ {
for b = 1; b <= 9; b++ {
if a*b == 45 {
break OuterFor
}
}
}
fmt.Printf("%d * %d = %d\n", a, b, a*b)
}
하지만,
label
을 사용하는 것은 혼동을 유발하고, 흐름제어에 대한 예기치 못한 오류를 야기하기 때문에, 되도록이면 중첩 반복문, 그리고 label을 이용한 흐름제어는 최대한 지양하는 것이 좋다.
차라리 내부 로직을 함수로 분리하여 활용하는 것이 유지보수 및 가독성에 좋은 방법이다.
Go 언어에서는 반복문은 for 문만을 여러 형태로 지원한다. 이를 직접 한번씩 연습해보며 익숙해지는 것이 중요하다.