Go

Go 기본 문법 3

알맹리 2023. 7. 24. 00:44

1. 변수와 상수
2. 연산자
3. 자료형
4. 콘솔 출력과 입력 함수
5. 반복문
6. 조건문
7. 분기문

8. 제어문
9. 컬렉션
10. 함수

 

구름에듀의 '한 눈에 끝내는 고랭 기초' 강의를 참고했습니다.

 

7. 제어문

switch문에 의한 선택적 실행

if ~else if문은 특정 조건과 맞는 조건문을 하나씩 검토해서 출력하고,

switch문은 그 조건과 맞는 부분을 실행합니다. switch문은 기본적으로 변수를 가져와 switch 옆에 '태그'로 사용합니다. 태그의 값에 따라 case의 라벨과 일치하는 것을 찾고, 일치하는 case의 구문을 수행합니다.

 

Go에서는 태그뿐 아니라 표현식을 쓰는 경우도 있습니다. case옆에도 라벨뿐 아니라 참/거짓을 판별할 수 있는 표현식을 쓰는 경우도 있습니다. 태그나 표현식이 어느 조건에도 맞지 않으면 default문을 사용해 해당 구문을 수행합니다.

if문처럼 블록 시작 브레이스({)를 같은 줄에 쓰지 않아도 실행되고, break를 따로 입력하지 않아도 해당되는 case만 수행합니다.

 

// switch문 형식
switch 태그/표현식{
case 라벨/표현식:
	수행구문
case 라벨/표현식:
	수행구문
	...
default 라벨/표현식:
	수행구문
}
package main
 
import "fmt"
 
func main() {
	var num int
	fmt.Print("정수 입력:")
	fmt.Scanln(&num)
	
	switch num {
	case 0:
		fmt.Println("영")
	case 1:
		fmt.Println("일")
	case 2:
		fmt.Println("이")
	case 3:
		fmt.Println("삼")
	case 4:
		fmt.Println("사")
	default:
		fmt.Println("모르겠어요.")
	}
}

 

Go에서 switch문은 아래 3가지 경우에 사용됩니다.

  • switch에 전달되는 인자로 태그 사용
  • switch에 전달되는 인자로 표현식 사용
  • switch에 전달되는 인자 없이 case에 표현식 사용(참/거짓 판별)
//switch에 전달되는 인자로 태그 사용
package main

import "fmt"

func main() {
	var fruit string
	
	fmt.Print("apple, banana, grape중에 하나를 입력하시오:")
	fmt.Scanln(&fruit)
	
	if (fruit != "apple") && (fruit != "banana") && (fruit != "grape") {
		fmt.Println("잘못 입력했습니다.")
		return
	}

	switch fruit {
	case "apple":
		fmt.Println("RED")
	case "banana":
		fmt.Println("YELLOW")
	case "grape":
		fmt.Println("PURPLE")
	}
}

위의 예시처럼 default문을 사용하지 않으면 if문으로 예외 처리를 해주어야 합니다.

return을 실행하면 함수가 종료됩니다. main 함수 안에서 return은 main 함수를 종료한다는 것을 의미하기 때문에 프로그램이 종료됩니다.

 

//switch에 전달되는 인자로 표현식 사용
package main

import "fmt"

func main() {
	var num int
	var result string
	
	fmt.Print("10, 20, 30중 하나를 입력하시오:")
	fmt.Scanln(&num)

	switch num / 10 { //표현식
	case 1:
		result = "A"
	case 2:
		result = "B"
	case 3:
		result = "C"
	default:
		fmt.Println("모르겠어요.")
		return
	}
	
	fmt.Println(result)
}

default문으로 예외처리

 

//switch에 전달되는 인자 없이 case에 표현식 사용(참/거짓 판별)
package main

import "fmt"

func main() {
	var a, b int

	fmt.Print("정수 a와 b를 입력하시오:")
	fmt.Scanln(&a, &b)

	switch {
	case a > b:
		fmt.Println("a가 b보다 큽니다.")
	case a < b:
		fmt.Println("a가 b보다 작습니다.")
	case a == b:
		fmt.Println("a와 b가 같습니다.")
	default:
		fmt.Println("모르겠어요.")
	}
}

 

8. 제어문

break문

break문은 for문, switch문, select문에서 사용할 수 있지만 반복문에서 많이 쓰입니다.

  • 직속 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
		}
	}
	
	fmt.Println("End")
}

break TEST1 문이 for루프를 빠져나와 TEST1로 이동한 후, break가 현재 for문을 건너뛰고 End를 출력합니다.

 

package main

import "fmt"

func main() {
	var sum = 0
	var i int
	
	i = 1
	
	for {
		sum += i
		if sum > 100 {
			break
		}
		i++
	}
	
	fmt.Println("1에서 ", i, " 까지 더하면 처음으로 100이 넘어요.")
	fmt.Println("합계:", sum)
}

 

Continue문

명시한 조건을 이용해 걸러주는 기능을 합니다. 

continue문을 만나면 해당 반복문의 조건검사(반복문의 처음) 부분으로 다시 이동하기 때문에 for문과 연관돼서 사용해야만 합니다.

package main

import "fmt"

func main() {

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

 

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:
}

'Go' 카테고리의 다른 글

Go 기본 문법 4  (2) 2023.07.24
Go 기본 문법 2  (0) 2023.07.23
Go 기본 문법  (0) 2023.07.23
Go가 무엇인고  (0) 2023.07.11