몇 가지 유용한 예제를 코딩하여 Golang for 루프에 대해 모두 알아보세요.
최근 Rust, Golang 및 TypeScript와 같은 프로그래밍 언어가 개발자들 사이에서 매우 인기를 얻고 있습니다. 백엔드 개발 및 DevOps에 관심이 있다면 Golang을 배우는 것이 탁월한 선택임을 고려해야 합니다!
프로그래밍 언어의 기초를 배우는 초보자라면 루프 구조는 가장 먼저 이해해야 할 개념 중 하나입니다.
Golang은 for 루프 구조만 제공합니다. 그리고 for 루프와 for 루프를 사용하여 다른 루프를 에뮬레이트하는 방법에 대해 알아봅니다.
의 시작하자!
목차
Golang For 루프의 구문
Golang에서는 다음 구문을 사용하여 for 루프를 만들 수 있습니다.
for initialization; condition; update { // do something }
여기,
- 초기화는 루핑 변수의 초기화를 나타냅니다.
- condition은 루프 본문의 실행을 결정하는 루핑 조건입니다. 루핑 조건이 true로 평가되는 한 루프 본문의 명령문이 실행됩니다. 그리고 조건이 거짓이 되면 컨트롤이 루프를 종료합니다.
- 업데이트는 루핑 변수에 대한 업데이트(일반적으로 증가 또는 감소)를 나타냅니다.
💡 이것이 괄호만 없는 C for 루프와 얼마나 유사한지 주목하십시오.
Golang for 루프의 제어 흐름은 다음과 같습니다.
몇 가지 예제를 코딩할 시간입니다!⏰ 함께 코딩하려면 Golang의 로컬 설치를 사용하거나 Go Playground에서 예제를 실행할 수 있습니다.
Golang For 루프 예제
방금 배운 구문을 사용하여 첫 번째 for 루프를 작성해 봅시다. 다음은 1에서 5까지의 숫자를 1단계씩 출력하는 간단한 for 루프입니다.
package main import "fmt" func main() { fmt.Println("For loop:") num := 5 for i := 1; i <= num; i++ { fmt.Println(i) } }
루핑 변수 i를 1로 초기화하고 조건을 i <= 5로 설정하고 반복할 때마다 루핑 변수를 1씩 증가시킵니다. 결과는 다음과 같습니다.
//Output For loop: 1 2 3 4 5
다른 for 루프를 작성해 봅시다. 이 루프는 5부터 시작하여 1까지 카운트다운합니다. 반복 변수가 1보다 크거나 같을 때까지 계속됩니다. 따라서 각 반복 후에 반복 변수를 1씩 감소시킵니다.
package main import "fmt" func main() { fmt.Println("For loop:") num := 5 for i := num; i >= 1; i-- { fmt.Println(i) } }
그리고 예상되는 결과를 얻습니다.
//Output For loop: 5 4 3 2 1
루핑 변수의 범위는 무엇입니까?
반복 변수의 범위는 for 루프 블록으로 제한되며 루프 외부에서 액세스할 수 없습니다.
이를 확인하기 위해 루프 외부에서 반복 변수 i의 값에 액세스해 봅시다.
package main import "fmt" func main() { fmt.Println("For loop:") num := 5 for i := 1; i <= num; i++ { fmt.Println(i) } fmt.Println(i) }
예상대로 i가 정의되지 않았다는 오류가 발생합니다(그리고 해당 범위는 for 루프로 제한됨).
// Output ./prog.go:11:14: undefined: i
Golang의 무한 For 루프
Go에서 무한 for 루프를 사용할 수 있습니까? 예, 가능합니다!
for 루프의 제어 흐름을 보면 다음과 같습니다.
- 루프 본문은 조건이 true로 평가되는 한 계속 실행됩니다.
- 조건이 거짓이 되면 컨트롤이 루프를 종료합니다.
- 따라서 조건이 거짓이 되지 않거나 항상 참이면 무한 루프에 빠진 것입니다.
그러나 구문 오류 없이 초기화, 조건 및 업데이트 없이 for 루프를 사용할 수도 있습니다. 따라서 다음과 같은 for 루프 구성을 사용하여 루프를 무한대로 실행하도록 할 수 있다면:
package main import "fmt" func main() { for { fmt.Println("running...") } }
//Output running... running... running... running... running... //and it goes on forever!
이 예제에서는 변수 num을 5로 설정합니다. 그리고 루프 조건은 num >= 5입니다. 따라서 num이 0보다 크거나 같은 동안 루프가 실행됩니다.
package main import "fmt" func main() { num := 5 for num > 0 { fmt.Println(num) } }
num의 값은 절대 변하지 않기 때문에 조건은 항상 true로 평가되고 루프는 영원히 실행됩니다!
//Output 5 5 5 5 5 5 //and it goes on forever!
모든 Golang에는 for 루프 구조만 있습니다. for 루프를 사용하여 while 및 do-while 루프를 에뮬레이트할 수 있습니다. 그럼 어떻게 하는지 배워봅시다!
For 루프를 사용하여 While 루프 에뮬레이션
while 루프는 일반적으로 다음 형식을 취합니다.
// initialize looping var while (condition){ // do something // update looping var }
기억한다면, 첫 번째 무한 for 루프에서 다음과 같이 작성했습니다. 초기화, 조건 및 업데이트 없이 다음 for 루프를 사용했습니다.
for { // the simplest infinite loop }
따라서 while 루프를 에뮬레이트하기 위해 다음 형식의 조건만 포함하도록 for 루프를 수정할 수 있습니다.
//initialize looping var for condition { // do something // update looping var }
다음은 우리가 작성한 첫 번째 for 루프와 동일한 while 루프입니다.
package main import "fmt" func main() { fmt.Println("Emulating while loop") num := 5 for num > 0 { fmt.Println(num) num-- } }
//Output Emulating while loop 5 4 3 2 1
For 루프를 사용하여 Do-While 루프 에뮬레이션
C와 같은 언어로 코딩했다면 do-while 루프 구조가 다음 형식을 취한다는 것을 알고 있습니다.
// initialize looping var do { //something // update looping var } while(condition);
while과 do while 루프의 주요 차이점은 while 루프가 루프에 들어갈 때 조건을 확인한다는 것입니다. 반면 do-while 루프는 루프 종료 시 조건을 확인합니다.
따라서 while 루프에서 조건이 false로 평가되면 루프 본문이 실행되지 않습니다. 그러나 do-while 루프에서는 조건이 false로 평가되더라도 루프 본문이 실행됩니다.
이 정보를 사용하여 do-while 루프의 동작을 에뮬레이트할 수 있습니다.
- 무한 for 루프 작성
- 올바른 조건과 함께 if 조건문을 사용하여 루프를 중단하십시오.
실행할 루프 본문의 조건이 num < 0인 do-while 루프를 작성하고 싶다고 가정해 보겠습니다. 따라서 for 루프를 작성하고 num >= 0인 경우 루프에서 나갈 수 있습니다.
package main import "fmt" func main() { fmt.Println("Emulating do-while loop") num := 5 for { fmt.Println("loop runs...") if num >= 0 { break } } }
💡 num < 0인 경우 루프를 실행하고 num >= 0인 경우 루프를 중단하는 것은 동일한 조건입니다.
num > 0 조건이 처음에는 거짓(num이 5임)이지만 루프 본문은 한 번 실행되어 do-while 루프를 에뮬레이트합니다.
//Output Emulating do-while loop loop runs...
For 루프를 사용하여 배열을 통해 루핑
for 루프와 범위를 사용하여 Golang에서 배열을 반복할 때 인덱스와 요소 모두에 액세스할 수 있습니다. 이것은 Python의 enumerate 함수와 유사하게 작동합니다.
여기서는 정수 배열인 numArray를 만듭니다. 그리고 for 루프를 사용하여 반복합니다.
package main import "fmt" func main() { fmt.Println("Looping through an array") numArray := []int{3, 7, 0, 10, 8, 9} for idx, num := range numArray { fmt.Println("At index", idx, ": ", num) } }
보시다시피 인덱스와 각 인덱스의 요소에 동시에 액세스할 수 있습니다.
//Output Looping through an array At index 0 : 3 At index 1 : 7 At index 2 : 0 At index 3 : 10 At index 4 : 8 At index 5 : 9
Golang For Loop에서 지연 사용
Golang에서는 defer 키워드를 사용하여 함수 호출을 연기할 수 있습니다.
리소스 정리 및 오류 처리와 같은 애플리케이션에 사용되지만 for 루프 내에서 defer를 사용하는 방법을 이해하는 것이 도움이 될 수 있습니다. Println() 함수에 대한 호출을 연기하기 위해 for 루프 내에서 defer를 사용할 때 어떤 일이 발생하는지 살펴보겠습니다.
package main import "fmt" func main() { fmt.Println("For loop:") num := 5 for i := 1; i <= num; i++ { defer fmt.Println(i) } }
💬 함수 호출이 지연되면 함수 호출이 스택에 푸시되고 LIFO 순서로 실행됩니다. 이 실행은 defer 문을 둘러싼 함수가 반환된 후에만 발생합니다.
따라서 fmt.Println(5)이 먼저 실행되고 fmt.Println(1)이 마지막에 실행됩니다.
//Output For loop: 5 4 3 2 1
결론
다음은 이 자습서에서 배운 내용을 요약한 것입니다.
- Golang에서는 for initialization 구문을 사용하여 for 루프를 만들 수 있습니다. 상태; 업데이트 { //루프 본문}.
- for 루프의 제어 흐름은 매우 간단합니다. 루핑 변수는 한 번 초기화되고 조회 조건은 루프 본문을 실행할지 여부를 결정하며 업데이트는 모든 반복 후 루핑 변수의 업데이트를 나타냅니다.
- 루핑 변수의 범위는 루프 본문으로 제한되며 루프 외부에서 액세스할 수 없습니다.
- Golang은 for 루프 구성만 제공하지만 for 루프를 사용하여 while 및 do-while 루프 동작을 에뮬레이트할 수 있습니다.
- for 루프의 몇 가지 다른 응용 프로그램에는 배열을 통한 루핑과 for 루프 본문 내부의 함수 호출 지연이 포함됩니다.
다음으로 Python에서 for 루프를 사용하는 방법을 배웁니다. 즐거운 배움!🎉