🔥 Range를 사용한 반복문

386자
5분

Go 언어에서는 for 루프를 사용하여 슬라이스나 맵을 반복할 수 있어요. 이를 "range" 형태의 for 루프라고 부른답니다.

슬라이스를 range로 반복할 때, 각 반복마다 두 개의 값이 반환되는데요. 첫 번째 값은 인덱스이고, 두 번째 값은 해당 인덱스의 요소 복사본이에요.

실제 코드를 통해 살펴볼까요?

package main
 
import "fmt"
 
var pow = []int{1, 2, 4, 8, 16, 32, 64, 128}
 
func main() {
	for i, v := range pow {
		fmt.Printf("2**%d = %d\n", i, v)
	}
}
 
go

코드를 하나씩 뜯어보면:

  1. pow라는 정수 슬라이스를 선언하고 2의 거듭제곱 값들로 초기화했어요.
  2. main() 함수 내에서 range를 사용해 pow 슬라이스를 반복하고 있죠.
  3. 각 반복마다, 인덱스는 i 변수에, 해당 인덱스의 요소 값은 v 변수에 할당됩니다.
  4. fmt.Printf()를 사용해 인덱스 i와 해당 인덱스의 2의 거듭제곱 값 v를 출력하고 있네요.

이 코드를 실행하면 다음과 같은 출력 결과를 얻을 수 있어요:

2**0 = 1
2**1 = 2
2**2 = 4
2**3 = 8
2**4 = 16
2**5 = 32
2**6 = 64
2**7 = 128
text

보시다시피 range는 슬라이스의 각 요소를 차례로 접근하며, 인덱스와 값을 쌍으로 반환하고 있죠. 이를 활용하면 슬라이스의 요소를 편리하게 반복 처리할 수 있답니다.

그런데 range는 슬라이스뿐만 아니라 배열에 대해서도 동일하게 사용할 수 있어요.

배열을 range로 순회할 때도 슬라이스와 마찬가지로 각 반복마다 인덱스와 해당 인덱스의 요소 값이 반환된답니다.

간단한 예제 코드를 통해 살펴볼까요?

package main
 
import "fmt"
 
func main() {
    arr := [5]string{"apple", "banana", "cherry", "date", "elderberry"}
 
    for i, v := range arr {
        fmt.Printf("arr[%d] = %s\n", i, v)
    }
}
 
go

코드를 하나씩 설명해 볼게요:

  1. arr이라는 문자열 배열을 선언하고 5개의 과일 이름으로 초기화했어요.
  2. for 루프에서 range를 사용해 arr 배열을 순회하고 있죠.
  3. 각 반복마다, 인덱스는 i 변수에, 해당 인덱스의 요소 값은 v 변수에 할당됩니다.
  4. fmt.Printf()를 사용해 인덱스 i와 해당 인덱스의 과일 이름 v를 출력하네요.

이 코드의 실행 결과는 다음과 같아요:

arr[0] = apple
arr[1] = banana
arr[2] = cherry
arr[3] = date
arr[4] = elderberry
text

보시다시피 range를 사용하여 배열의 각 요소에 차례로 접근하고, 인덱스와 값을 쌍으로 얻을 수 있죠.

배열의 크기가 컴파일 타임에 결정되는 반면, 슬라이스는 동적으로 크기가 변할 수 있다는 점만 기억해 주세요. 하지만 range를 사용하여 순회하는 방식은 배열과 슬라이스 모두 동일하답니다.

range를 사용한 for 루프는 Go 언어에서 자주 사용되는 패턴이에요. 고정 크기의 배열이든, 동적 크기의 슬라이스든 range를 활용하면 요소를 쉽게 반복 처리할 수 있죠. 다양한 자료 구조를 반복할 때 range를 적극 활용해 보세요. 코드가 더욱 간결하고 가독성 있어질 거예요!