Go 언어의 for 반복문

GolangBeginner
지금 연습하기

소개

다른 프로그래밍 언어와 달리 Go 언어에는 반복문을 위한 키워드가 오직 for 하나뿐입니다. 하지만 이 하나만으로도 매우 효율적이고 유연하게 사용할 수 있습니다. 지금부터 Go 의 for 반복문에 대해 알아보겠습니다.

학습 포인트:

  • for 반복문
  • for range 반복문

문자열의 개별 문자 다루기

이전 섹션의 기본 데이터 구조에서 문자열은 문자들의 집합이라는 것을 배웠습니다. 따라서 인덱스를 사용하여 문자열 내의 특정 문자를 가져올 수 있습니다. string.go 파일을 생성하고 다음 코드를 작성해 봅시다.

cd ~/project
touch string.go
package main

import "fmt"

func main() {
    s := "labex"

    // 인덱스를 사용하여 문자열의 각 문자에 접근
    fmt.Println(s[0], s[1], s[2], s[3], s[4])
    // 문자 형식으로 출력
    fmt.Printf("%c %c %c %c %c\n", s[0], s[1], s[2], s[3], s[4])
}

프로그램을 실행합니다.

go run string.go

출력 결과는 다음과 같습니다.

108 97 98 101 120
l a b e x

이 프로그램에서는 "labex"라는 문자열 변수를 선언하고 인덱스를 사용하여 각 문자에 접근했습니다. 첫 번째 출력 시 실제 문자가 아닌 숫자가 출력되는 것을 볼 수 있습니다.

ASCII 코드표와 비교해 보면, 이 숫자들이 실제 문자와 대응함을 알 수 있습니다. 예를 들어 ASCII 표에서 "108"은 "l"에 해당합니다.

이는 문자가 실제로 "UTF-8" 인코딩 방식에 따라 각 문자의 숫자 인코딩 값을 저장하기 때문입니다. "UTF-8"은 "ASCII"와 호환되므로, 문자 "l"이 있는 위치에는 실제 숫자 인코딩 값인 "108"이 저장됩니다.

만약 숫자가 아닌 문자로 출력하고 싶다면, fmt.Printf 함수와 %c 서식 지정자를 사용하면 됩니다. 코드의 두 번째 출력 줄에서 이를 확인할 수 있습니다. 이 방식은 숫자 인코딩을 문자로 변환하여 출력해 줍니다.

하지만 string.go 파일에서처럼 문자열의 모든 문자에 접근하기 위해 매번 인덱스를 직접 작성하는 것은 매우 번거로운 일입니다. 데이터가 수백, 수천 개라면 더욱 그렇겠죠. 이럴 때 for 반복문을 사용하면 효율적으로 처리할 수 있습니다.

For 반복문 구문

반복문은 특정 조건에 따라 프로그램을 반복해서 실행합니다. for 반복문의 기본 구문을 살펴보겠습니다.

for initialization; condition; post {
    // 코드 블록
}

**initialization(초기화 문장)**은 변수를 초기화합니다. **condition(조건식)**은 불리언 (boolean) 값을 반환해야 하며, 이 조건이 참인 동안 반복됩니다. **post(후처리 문장)**는 매 반복이 끝날 때마다 변수의 값을 수정합니다. 구체적인 예시를 보겠습니다.

~/project 디렉토리에 for.go 파일을 생성하고 다음 내용을 작성하세요.

cd ~/project
touch for.go
package main

import "fmt"

func main() {
    // 0 부터 9 까지의 숫자 출력
    for i := 0; i < 10; i++ {
        fmt.Println(i)
    }
}

프로그램을 실행합니다.

go run for.go

출력 결과는 다음과 같습니다.

0
1
2
3
4
5
6
7
8
9

이 프로그램에서는 먼저 임시 변수 i를 0 으로 초기화하고, 매 반복마다 i의 값을 1 씩 증가시킵니다. 조건식은 i가 10 보다 작을 때까지 반복하도록 설정되어 있어, 결과적으로 0 부터 9 까지의 숫자가 출력됩니다.

참고: Go 의 for 반복문에서 초기화, 조건식, 후처리 문장은 모두 생략 가능합니다. 즉, 이 문장들이 없어도 for 반복문은 정상적으로 작동할 수 있습니다.

만약 조건식만 남겨둔다면, 다른 언어의 "while" 반복문과 유사하게 동작합니다.

다음 코드는 조건식만 사용하여 이전 프로그램과 동일한 결과를 냅니다.

package main

import "fmt"

func main() {
    i := 0
    for i < 10 {
        fmt.Println(i)
        i++
    }
}

조건식만 사용할 때는 문장을 구분하는 세미콜론 ;을 생략할 수 있음을 알 수 있습니다.

For 반복문 활용하기

이제 반복문 구문을 이해했으니, 첫 번째 프로그램이었던 string.gofor 반복문을 사용하여 다시 작성해 봅시다.

package main

import "fmt"

func main() {
    s := "labex"
    for i := 0; i < len(s); i++ {
        fmt.Printf("%d %c\n", int(s[i]), s[i])
    }
}

프로그램을 실행합니다.

go run string.go

출력 결과는 다음과 같습니다.

108 l
97 a
98 b
101 e
120 x

퀴즈

반복문에 대한 이해를 돕기 위해 간단한 퀴즈를 풀어봅시다.

for2.go 파일을 생성하세요. 과제는 "labex"라는 문자열의 각 문자를 역순으로 출력하는 것입니다.

예상 출력:

x
e
b
a
l

요구 사항:

  • for2.go 파일은 ~/project 디렉토리에 위치해야 합니다.
  • for 반복문을 사용하여 결과를 구현하세요.

힌트: 인덱스는 0 부터 시작한다는 점을 기억하세요.

"break" 키워드

이전 섹션에서 for 반복문의 세 가지 요소를 모두 생략할 수 있다고 언급했습니다. 만약 아무것도 선언하지 않으면 어떻게 될까요? 직접 확인해 봅시다.

for.go 파일에 다음 코드를 작성하세요.

package main

import "fmt"

func main() {
    for {
        fmt.Printf("1")
    }
}

프로그램을 실행합니다.

go run for.go

조건식을 선언하지 않으면 조건이 항상 true인 것으로 간주되어 무한 루프에 빠지게 됩니다.

팁: 프로그램을 중단하려면 Ctrl+C를 누르세요.

조건식을 선언하지 않았거나 작성할 수 없는 상황에서 특정 조건일 때 반복문을 빠져나가고 싶다면 break 키워드를 사용합니다. 이 키워드는 자신을 감싸고 있는 가장 가까운 반복문을 즉시 종료시킵니다.

for.go 파일을 수정하여 break 키워드를 사용해 "1"을 23 번만 출력하도록 만들어 봅시다.

package main

import "fmt"

func main() {
    i := 0
    for {
        // 매 반복마다 i 의 값을 1 씩 증가
        i++
        fmt.Printf("1")
        // i 의 값이 23 이 되면 반복문 탈출
        if i == 23 {
            break
        }
    }
}

break 키워드는 조건식이 없는 반복문뿐만 아니라 조건식이 있는 반복문에서도 사용할 수 있습니다. break 조건을 만족하면 기존의 조건식 검사를 건너뛰고 즉시 반복문을 종료합니다.

"continue" 키워드

반복문을 즉시 종료하는 break와 달리, continue 키워드는 현재 진행 중인 반복 회차의 나머지 코드를 건너뛰고 즉시 다음 반복 회차로 넘어갈 때 사용합니다.

continue의 사용법은 break와 비슷하지만 기능은 완전히 다릅니다.

for.go 파일을 수정하여 숫자 2 와 8 을 건너뛰고 출력해 봅시다.

package main

import "fmt"

func main() {
    for i := 0; i < 10; i++ {
        if i == 2 || i == 8 {
            continue
        }
        fmt.Println(i)
    }
}

프로그램을 실행합니다.

go run for.go

출력 결과는 다음과 같습니다.

0
1
3
4
5
6
7
9

이 프로그램에서는 반복문 블록 안에 조건문을 추가했습니다. 현재 변수 i의 값이 2 또는 8 이면 continue를 실행하여 아래의 출력 코드를 무시하고 다음 반복으로 넘어갑니다. 그 결과 출력물에서 2 와 8 이 제외된 것을 확인할 수 있습니다.

요약

이번 실습에서는 for 반복문에 대해 배웠습니다. 핵심 내용을 정리해 봅시다.

  • for 반복문의 세 가지 매개변수 (초기화, 조건식, 후처리) 는 모두 선택 사항입니다.
  • break 키워드는 현재 반복문을 완전히 빠져나갈 때 사용합니다.
  • continue 키워드는 현재 반복 회차를 건너뛰고 다음 회차를 시작할 때 사용합니다.
✨ 솔루션 확인 및 연습