갈루아의 반서재

1에서 시작하여 10까지 카운팅하는 프로그램을 만들어보자. 지금까지 배운 지식으로는 다음과 같이 작성할 수 있을 것이다. 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
package main
 
import "fmt"
 
func main() {
    fmt.Println(1)
    fmt.Println(2)
    fmt.Println(3)
    fmt.Println(4)
    fmt.Println(5)
    fmt.Println(6)
    fmt.Println(7)
    fmt.Println(8)
    fmt.Println(9)
    fmt.Println(10)
}
cs

또는 다음과 같이 표현할 수 있다.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
package main
import "fmt"
 
func main() {
  fmt.Println(`1
2
3
4
5
6
7
8
9
10`)
}
cs

실행결과는 다음과 같이 동일하다.

1
2
3
4
5
6
7
8
9
10
11
~/go/src/golang-book/chapter5# go run main.go
1
2
3
4
5
6
7
8
9
10
cs

두 방식 모두 지루하기 짝이 없다. 이제 알아야할 것은 같은 작업을 어떻게 반복시키느냐이다.


For

for 문은 명령문을 반복해서 실행가능하도록 해준다. 앞선 프로그램을 다음과 같이 간략히 표현할 수 있다.

1
2
3
4
5
6
7
8
9
10
package main
import "fmt"
 
func main() {
    i := 1
    for i <= 10 {
        fmt.Println(i)
        i = i + 1
    }
}
cs

먼저 출력하기를 원하는 숫자를 저장하기 위한 변수 i 를 생성한다. 그리고 for 키워드를 활용하여 loop 문을 만든다. loop 문은 다음과 같이 작동한다. 

i <= 10 ("10보다 작거나 같은 i”)에 대해 만약 true 로 평가되면, 해당 블록 안의 문장을 실행한다. 그렇지 않으면 프로그램의 다음 문장으로 넘어간다. 위의 코드의 경우 더 이상 실행할 문장이 없어 종료된다. 그리고 블록 안의 문장이 실행되고 나면 다시 처음으로 돌아가 반복하게 된다. 

i = i + 1 라인이 특히 중요한데, 만약에 해당 라인이 없다면 i <= 10 은 항상 true 로 평가될 것이고, 프로그램은 절대 끝나지 않기 때문이다. 다음과 같이 진행되는 셈이다.

1이라는 값을 가지는 변수 i 를 만든다.

i <= 10 ? Yes

i 를 출력한다.

i 에 1을 더한다 (이제 i 는 2가 된다)

i <= 10? Yes.

i 를 출력한다.

i 에 1을 더한다 (이제 i 는 3이 된다)

i 에 1을 더한다 (이제 i 는 11이 된다)

i <= 10? No.

해당 사항이 없으니 종료.


다른 프로그램 언어에는 while, do, until, foreach 등 여러가지 루프문이 존재하지만, Go 는 이 하나를 가지고 다양하게 활용한다. 위의 프로그램은 다음과 같이 작성가능하다.

1
2
3
4
5
6
7
8
9
package main
 
import "fmt"
 
func main() {
  for i := 1; i <= 10; i++ {
    fmt.Println(i)
  }
}
cs

세미콜론을 가진 2개의 다른 명령문이 포함되었음을 알 수 있다. 먼저 변수를 초기화하고, 각각의 조건 부합여부를 체크하고, 마지막으로 변수를 증가시킨다.