Go언어 range 키워드 이해 :: The Obligatory Courtesy Smile

Go언어 range 키워드 이해

Posted by 곰도리네
2017.11.17 01:03 Computing&IT/프로그래밍 - golang

Go언어에는 range라는 키워드가 있습니다. 기존의 C계열 언어에서는 익숙치 않은 키워드입니다.


range에 대해서 간단히 이해하기 좋은 소스코드가 있어서 이를 보면서 알아보겠습니다.


아래 소스코드는 gopl.io/ch1/echo2에서 긁어온 소스코드입니다. 

// 커맨드라인 인수 출력 프로그램
package main

import (
"fmt"
"os"
)

func main() {
s, sep := "", ""
for _, arg := range os.Args[1:] {
s += sep + arg
sep = " "
}
fmt.Println(s)
}

위 소스코드는 운영체제 커맨드라인의 인수 (예를 들어서, notepad.exe 뒤에 test.txt를 덧붙이는 방식으로 인수를 pass하는 경우가 있죠)를 출력하는 프로그램입니다.


눈에 띄는 것은 range라는 키워드입니다.


range는 한마디로 루프문을 돌리면서 값의 쌍을 생성시키는 것입니다. 기존에 for loop 등을 이용하여 하던 것을 간편화하는 기능이죠.


위의 소스코드에서 os.Args는 문자열의 슬라이스입니다. 슬라이스가 궁금하다면 golang의 배열, 슬라이스, 맵 파트를 찾아보시면 됩니다. 일단 간단히 슬라이스란 각 원소는 s[i]로, 각 부분집합은 s[m:n]으로 표기할 수 있다고 알아두시면 됩니다. 이 노테이션이 아직 익숙하지 않을 수 있지만 슬라이스 파트를 공부하면 이해되실겁니다.


여하간 위의 range os.Args[1:]이라 함은 os.Args의 두번째 인덱스/값부터 마지막까지를 루프를 돌리면서 값을 생성하는 겁니다.


문제는, range문은 인덱스 처리가 필요합니다. 이 경우 밑줄 ' _ ' (under bar)로 표기되는 빈 식별자를 쓰시면 됩니다. 한마디로 원치 않는 루프 인덱스를 제거시키는데 사용하는 겁니다. 위의 for _, arg := range os.Args[1:]는 결국, os.Args 슬라이스의 두번째 인덱스/값을 루프를 돌면서 얻어오는데 인덱스는 무시하는 결과가 됩니다.


슬라이스를 사용하면서 range를 적극적으로 활용하면 좀 더 간소화된 루프문을 구현할 수 있습니다.

이 댓글을 비밀 댓글로

티스토리 툴바