[Golang] 제어문

이정훈·2023년 5월 25일
0

Golang

목록 보기
19/24
post-thumbnail

break, continue, goto

  • 제어문은 반복문에서 대부분 사용!

  • why? 반복문을 사용하다보면 같은 구문을 반복해서 계속 실행하기 때문에 이를 제어할 상황이 온다.

  • 예를 들어,

  • "1부터 10까지 계속 순차적으로 출력하다가 3의 배수는 건너뛰어",

  • "1부터 10까지 출력하다가 4가 되면 반복문을 빠져나와",

  • "1부터 10까지 출력하다가 4가 되면 50부터 80을 출력하는 부분(레이블)으로 가"와 같은 상황

  • 반복문을 탈출하는 break, 반복문의 첫부분으로 돌아가는 continue, 특정 부분으로 갈 수 있는 goto

이곳을 빠저나와라이~ break

  • 해당부분을 빠져나오는 용법

  • 여기서 '해당부분'이라고 표현한 이유는 break는 꼭 for문 뿐아니라, swtich문과 select문에서도 사용이 가능하기 때문이다!!

  • for문과 동일하게 모든 용법에서 그 쓰임이 동일 하다.

  • 하지만 제어문 자체가 반복문에 많이 쓰이기 때문에 반복문에서의 사용을 공부해보자!

    • break문은 '직속 for문'을 빠져나오게 해준다.
      여러 for문이 중첩돼 있는 상황일 때 break문을 쓰면 break문이 있는 for 문만 빠져나오게 된다. 그리고 해당 for문을 빠져나온 뒤 바로 다음 문장을 실행
    • break문은 보통 단독으로 사용되지만, 경우에 따라 break 레이블 이름과 같이 사용되어 지정된 레이블로 이동이 가능
      쉽게 말해, 해당 for문을 빠져나옴과 동시에 지정한 레이블로 이동한다는 뜻!
      소제목으로 '똑똑한 break'라고 정의했는데, 'break 레이블이름'으로 되어 있을 때 직속 for문을 빠져나와 해당 레이블로 이동하고 break문이 바로 빠져나왔던 for문 다음 문장을 실행하게한다.

코드

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 레이블명을 입력하면 해당 레이블로 흐름이 이동!
  • 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를 입력하지 않으셨습니다!
  • 굳이 저렇게 이동을 시켜야 했나..?

한 눈에 끝내는 고랭 기초 !!

profile
싱숭생숭늉

0개의 댓글