제어문

제어문

제어문인 break, continue, goto문에 대해 알아보자.


제어문


제어문반복문에서 대부분 사용됩니다. 왜냐하면, 반복문을 사용하다보면 같은 구문을 반복해서 계속 실행하기 때문에 이를 제어할 상황이 오기 때문입니다. 제어문은 바로 반복문을 탈출하는 break, 반복문의 첫부분으로 돌아가는 continue, 특정 부분으로 갈 수 있는 goto 입니다. 하나씩 특징을 살펴보도록 하겠습니다.

똑똑한 break


break문은 쉽게 말해 해당 부분을 빠져나오는 용법입니다.

1. break문은 '직속 반복문'을 빠져나오게 해줍니다. 여러 반복문이 중첩돼 있는 상황일 때 break문을 쓰면 break문이 있는 반복문만 빠져나오게 됩니다. 그리고 해당 반복문을 빠져나온 뒤 바로 다름 문장을 실행시킵니다. 
2. break문은 보통 단독으로 사용되지만, 경우에 따라 "break 레이블이름"과 같이 사용되어 지정된 레이블로 이동할 수 있습니다.
package main

import "fmt"

func main() {
	i := 0

TEST1:
	for {
		if i == 0 {
			break TEST1
		}
	}
	
	fmt.Println("End")
}

예시를 보고 흐름을 따라간다면 언뜻 무한 루프를 돌 것 같습니다. 하지만 실제로는 “End”를 출력하고 프로그램을 종료합니다. break현재 for루프를 건너 뛰고 다음 문장인 fmt.Println("End")로 이동하기 때문입니다.

원하는 조건을 걸러주는 continue


continue문명시한 조건을 이용해 걸러주는 기능을 합니다. continue문은 break문과 다르게 for문과 연관돼서 사용해야만합니다. 왜냐하면 continue문을 만나면 해당 반복문의 조건검사(반복문의 처음) 부분으로 다시 이동하기 때문입니다.

package main

import "fmt"

func main() {

	for i := 1; i < 16; i++ {
		if i%2 == 0 {
			continue //반복문 처음 부분으로 간다
		}
		
		fmt.Printf("%d ", i)
	}
}

잘 안 쓰이는 goto


goto프로그램의 흐름을 원하는 위치로 이동시킬 때 사용하는 키워드입니다. 위치는 레이블로 표시하는데 "goto 레이블명"을 입력하면 해당 레이블로 흐름이 이동하게 됩니다.
하지만 요즘엔 goto의 사용에 부정적인 분위기입니다. 이유는 '프로그램의 자연스러운 흐름을 방해한다'는 것입니다. 그래도 간단하게 아래 예시를 통해 배워보겠습니다.

package main

import "fmt"

func main() {
	var num int

	fmt.Print("자연수를 입력하세요:")
	fmt.Scanln(&num)

	if num == 1 {
		goto ONE
	} else if num == 2 {
		goto TWO
	} else {
		goto OTHER
	}

ONE:
	fmt.Print("1을 입력했습니다.\n")
	goto END
TWO:
	fmt.Print("2를 입력했습니다.\n")
	goto END
OTHER:
	fmt.Print("1이나 2를 입력하지 않으셨습니다!\n")
END:
}

© 2022. All rights reserved. 신동민의 블로그