제어문은 반복문에서 대부분 사용!
why? 반복문을 사용하다보면 같은 구문을 반복해서 계속 실행하기 때문에 이를 제어할 상황이 온다.
예를 들어,
"1부터 10까지 계속 순차적으로 출력하다가 3의 배수는 건너뛰어",
"1부터 10까지 출력하다가 4가 되면 반복문을 빠져나와",
"1부터 10까지 출력하다가 4가 되면 50부터 80을 출력하는 부분(레이블)으로 가"와 같은 상황
반복문을 탈출하는 break
, 반복문의 첫부분으로 돌아가는 continue
, 특정 부분으로 갈 수 있는 goto
break
해당부분을 빠져나오는 용법
여기서 '해당부분'이라고 표현한 이유는 break는 꼭 for문 뿐아니라, swtich문과 select문에서도 사용이 가능하기 때문이다!!
for문과 동일하게 모든 용법에서 그 쓰임이 동일 하다.
하지만 제어문 자체가 반복문에 많이 쓰이기 때문에 반복문에서의 사용을 공부해보자!
break 레이블 이름
과 같이 사용되어 지정된 레이블로 이동이 가능코드
package main import "fmt" func main() { i := 0 TEST1: for { if i == 0 { break TEST1 // break 가 설정되어 있으니깐 다시 TEST1으로 갔다가 다음 명령어를 실행해라! } } fmt.Println("End") }
출력
end
break
를 걸어줘서 다음 코드인 fmt.Println("End")
이 친구가 실행되어졌다.코드
package main import "fmt" func main() { var sum = 0 var i int i = 1 for { sum += i if sum > 100 { break // 계속 증가하고 1+2+3 ... 이렇게 이어지고 있는데 여기서 sum이 100이 넘으면 종료!! //그때 i가 마지막으로 선언될것이고 아래 프린트 명령어가 발동! } i++ // i는 계속해서 1이 증가하는 중! } fmt.Println("1에서 ", i, " 까지 더하면 처음으로 100이 넘어요.") fmt.Println("합계:", sum) }
출력
1에서 14 까지 더하면 처음으로 100이 넘어요. 합계: 105
continue
명시한 조건을 이용해 걸러주는 기능!
break문과 다르게 for문과 연관돼서 사용해야만한다.
why? continue문을 만나면 해당 반복문의 조건검사(반복문의 처음) 부분으로 다시 이동하기 떄문!
코드
package main import "fmt" func main() { for i := 1; i < 16; i++ { if i%2 == 0 { continue //반복문 처음 부분으로 간다 // continue문은 i가 짝수일 때 반복문을 건너뛰게 합니다 // 원하는 조건을 걸러주는 것이다! // 그러니깐 조건문이 참이면 그건 걸러줘!! } fmt.Printf("%d ", i) } }
출력
1 3 5 7 9 11 13 15
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: }
입력
3
출력
1이나 2를 입력하지 않으셨습니다!