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 문만을 여러 형태로 지원한다. 이를 직접 한번씩 연습해보며 익숙해지는 것이 중요하다.