Go Lang 기초 6 - 반복문 for

만두아빠·2021년 7월 23일
1

Go Lang 기초

목록 보기
6/14
post-thumbnail

Go Lang에서 반복문은 for문 하나를 사용합니다.
Go Lang의 for 반복문은 기본적으로for 초기값; 조건식; 증감식 {} 의 형태를 가집니다.
괄호()는 사용하지 않으며, 사용시 오류 메시지를 반환합니다.

아래의 예제들을 통해 for문에 대해 상세히 알아보도록 하겠습니다.


package main

import "fmt" 

func main() {
    sum := 0
    for a := 1; a <= 10; a++ {
        sum += a
    }
    fmt.Println(sum)
}

출력결과값
55


위의 예제는 sum을 먼저 0으로 선언하고 a 변수에 for문을 통한 반복으로 10까지 증감한 값을 sum에 더하면서 대입한 결과를 출력하는 형태입니다.

즉, a가 1부터 시작해서 증감식 a++을 통해 1씩 늘어나는 반복식을 sum에 계속 합산하도록 구성하여 1+2+3+...+10을 구현해놓은 것입니다.

Go Lang에서 for문을 사용한 무한 루프를 사용하는 방법은 매우 간단합니다.

package main

import "fmt"

func main() {
	for {
    	fmt.Println("무한루프 진행중")
    }
}

for 외의 아무것도 입력하지 않으면 무한 루프가 되며, 무한 루프에서 탈출하는 방법은 CTRL + C 입력을 통해 가능합니다.


for문과 함께 사용할 수 있는 range문에 대해서도 알아보겠습니다.

range문은 이후에 더 상세히 알아볼 배열(Array), 슬라이스(Slice), 맵(Map)과 같은 컬렉션에서 하나씩의 요소들을 가져와 for문을 실행하도록 합니다.

range는 두 개의 값을 반환하는데 첫번째는 key(index)값이고, 두번째는 value입니다.

for ~ range문은 for index, value := range 컬렉션 의 형태를 가집니다.

package main

import "fmt"

func main() {
	numbers := []int{1, 2, 3}
		for _, num := range numbers {
		fmt.Println(num)
	}
}

출력결과값
1
2
3

위의 예제에서 for 뒤의 _는 for ~ range의 반환값인 index와 value 중 index 값을 직접 입력하지 않고 함수를 실행시키기 위해 사용합니다.


다음으로는 for문에서의 break, continue, goto문에 대해 알아보도록 합시다.

for문의 반복을 바로 중단하기 위해서는 break를 사용합니다. 또, for의 반복 루프 도중에 뒤의 문장을 실행하지 않고 for문의 시작지점으로 가기 위해서는 continue를 사용합니다. goto는 다음 지정하는 값의 위치로 이동할 수 있게 해주는 역할을 합니다.


package main

import "fmt"

func main() {
	for a := 0; a < 10; a++ {
		if a == 3 { 
			continue  // a == 3이 되면 continue로 다시 for문의 시작점으로
		}
		fmt.Println(a)
		if a == 4 {
			break    // a == 4가 되면 break로 for 루프를 탈출
		}
	}
}

출력결과물
0
1
2
4

위의 예제에서 볼 수 있듯이 continue는 if 조건식을 만족할 시 해당 if문을 실행하지 않고 for문의 시작점으로 이동시켜주어 3은 출력되지 않았습니다.


이번에는 goto를 활용한 예제를 살펴보도록 하겠습니다.

package main

import "fmt"

func main() {
	a := 0
	for ; a < 10; a++ {
		if a == 3 {
			continue
		}
		fmt.Println(a)
		if a == 7 {
			break
		}

		if a == 4 {
			goto L1 // a == 4가 되면 L1으로 점프
		}
	}
	fmt.Println("a의 값은 :", a)
L1:
	fmt.Println("goto문으로 도달")
}

출력결과물
0
1
2
4
goto문으로 도달

위의 예제에서는 a == 4에 도달한 시점에서 goto를 통해 L1의 Println을 실행하고 종료되었습니다.


break 레이블에 대해서도 추가로 알아보도록 합시다. 일반적으로는 break만을 사용해 for 반복루프를 빠져나오는 식을 구현할 수도 있지만, break 레이블을 통해 for 루프를 빠져나와 지정된 레이블로 이동하고 break가 속한 for 반복문 전체의 다음 문장을 실행하도록 할 수 있습니다.

package main

import "fmt"

func main() {
	i := 0
L1:      
	for {
		for {
			if i == 0 {
				break L1    // 위의 L1으로 이동하는 레이블을 작성
			}
		}
	}
	fmt.Println("무사히 탈출!")
}

출력결과물
무사히 탈출!

위의 예제는 for 반복문에 의해 무한루프에 갇힐 것 같은 예제이지만 실제 출력을 보면 그렇지 않습니다. break 후 L1으로 이동한 해당 문장에서는 break가 포함되어있는 for 반복문을 건너뛴 후 Println을 무사히 출력시키고 종료되었습니다.

profile
Velog는 잠시 쉬어갑니다! 아래의 링크로!

0개의 댓글