for문은 어떤 로직을 반복해서 실행할 때 가장 흔히 쓰이는 문 중 하나예요.
Go에서는 for 키워드, 헤더, 그리고 중괄호로 감싼 루프 본문을 담는 코드 블록으로 이루어져 있어요.
헤더는 세미콜론 ;으로 구분된 세 가지 요소로 이루어져요. 바로 init, condition, post예요.
for init; condition; post {
// loop body - code that is executed repeatedly as long as the condition is true
}
참고: 다른 언어와 달리, 헤더의 세 요소를 감싸는 괄호 ()가 없어요.
오히려 이런 괄호를 넣으면 컴파일 오류가 발생해요.
그렇지만 루프 본문을 감싸는 중괄호 { }는 항상 필요해요.
for문 예제init 요소는 보통 카운터 변수를 준비하고, condition은 루프를 계속할지 멈출지 확인하며, post는 보통 매 반복이 끝날 때 카운터를 증가시켜요.
for i := 1; i < 10; i++ {
fmt.Println(i)
}
이 루프는 1부터 9까지의 숫자를 출력해요(9도 포함해서요).
반복의 간격을 정할 때는 위 예제처럼 증가문이나 감소문을 사용하는 경우가 많아요.
여러분은 정원에 찾아온 새가 몇 마리인지 기록하는 열렬한 새 관찰자예요. 보통은 공책에 하나씩 표시하며 새의 수를 세지만, 데이터를 더 잘 다루기 위해 지난 몇 주 동안의 새 개수를 디지털화했어요.
먼저 전체적인 그림을 보면서 데이터 분석을 시작해 봐요. 기록을 시작한 이후로 총 몇 마리의 새를 셌는지 알아봐요.
하루에 센 새의 수가 담긴 int 슬라이스를 받는 TotalBirdCount 함수를 구현해요. 이 함수는 센 새의 총 개수를 반환해야 해요.
birdsPerDay := []int{2, 5, 0, 7, 4, 1, 3, 0, 2, 5, 0, 1, 3, 1}
TotalBirdCount(birdsPerDay)
// => 34
새 개수 데이터에 어느 정도 감이 잡혔으니, 이제 더 세밀하게 분석해 보고 싶어요.
하루에 센 새의 수가 담긴 슬라이스와 주차를 받는 BirdsInWeek 함수를 구현해요.
이 함수는 그 주에 센 새의 총 개수를 반환해요. 주는 항상 완전히 기록되어 있다고 가정해도 돼요.
birdsPerDay := []int{2, 5, 0, 7, 4, 1, 3, 0, 2, 5, 0, 1, 3, 1}
BirdsInWeek(birdsPerDay, 2)
// => 12
새를 기록하던 내내, 정원 멀리 구석에 숨어 있던 새가 한 마리 있었다는 걸 깨달았어요.
그 새는 이틀에 한 번씩 항상 정원에 머물렀다는 걸 알아냈어요.
그 사이에 그 새가 어디에 있었는지는 정확히 모르지만, 분명히 정원에는 없었어요.
새 관찰자의 직감은 그 새가 목록에서 처음 기록한 날에도 정원에 있었다고 알려줘요.
이 새로운 정보를 바탕으로, 하루에 센 새의 수가 담긴 슬라이스를 인자로 받아 세는 실수를 바로잡은 슬라이스를 반환하는 FixBirdCountLog 함수를 작성해요.
birdsPerDay := []int{2, 5, 0, 7, 4, 1}
FixBirdCountLog(birdsPerDay)
// => [3 5 1 7 5 1]
Exercism에 가입하고 Go 트랙을 개념 34개연습 문제 166개, 그리고 실제 사람의 멘토링과 함께 배우고 익혀 보세요. 모두 무료예요.