[Go 언어] 28. switch 선택문

안녕하세요. 언제나 휴일입니다.

이번에는 변수 값에 따라 특정 코드를 선택해서 수행하는 swith 선택문을 알아볼게요.

switch 선택문은 switch 키워드 뒤에 태그나 표현 식을 사용하거나 case에 특정 표현을 사용하는 세 가지 방법으로 생각할 수 있어요.

먼저 switch 키워드 뒤에 태그를 사용하는 방법을 살펴볼게요.

switch tag{

case 상수1: 수행 구문

case 상수2: 수행 구문

default: 수행 구문

}

switch 뒤에 태그 표현의 값이 특정 case에 표현한 상수 값이면 해당 수행 구문을 동작하고 그렇지 않을 때는 default의 수행 구문을 동작합니다.

다음은 정수를 입력받아서 0에서 4사이의 정수를 입력하면 한글로 해당 숫자를 출력하고 그렇지 않으면 모르는 수라고 출력하는 예제 코드입니다.

// Example switch 뒤에 태그
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 선택문에 tag에는 문자열 형식도 올 수 있어요. 다음은 이름을 입력하였을 때 “abc”이거나 “ABC”이면 그에 맞는 메시지를 출력하고 그렇지 않을 때는 모르는 사람이라고 출력하는 예제 코드입니다.

// Example switch 뒤에 문자열
package main

import "fmt"

func main() {
	var name string
	fmt.Print("이름 입력:")
	fmt.Scanln(&name)
	switch name {
	case "abc":
		fmt.Println("휘리릭~")
	case "ABC":
		fmt.Println("달려 달려~")
	default:
		fmt.Println("모르겠어요.")
	}
}

Go 언어의 switch 문에서는 switch 뒤에 표현식이  올 수 있어요.

switch 표현식{

case 상수1: 수행 구문

case 상수2: 수행 구문

default: 수행 구문

}

다음은 점수를 입력받아서 0~100점 사이가 아니면 입력 오류 메시지를 출력하고 그렇지 않으면 학점을 출력하는 예제 코드입니다. 이 때 switch 뒤에 score/10 표현식을 사용하였습니다.

// Example switch 뒤에 표현식
package main

import "fmt"

func main() {
	var score int
	fmt.Print("점수 입력:")
	fmt.Scanln(&score)
	if (score < 0) || (score > 100) {
		fmt.Println("잘못 입력하셨네요.")
		return
	}

	switch score / 10 {
	case 10:
	case 9:
		fmt.Println("A")
	case 8:
		fmt.Println("B")
	case 7:
		fmt.Println("B")
	case 6:
		fmt.Println("B")
	case 5:
		fmt.Println("B")

	default:
		fmt.Println("모르겠어요.")
	}
}

Go 언어의 switch 문에서는 switch 키워드 뒤에 아무것도 표현하지 않고 case 문에 참과 거짓에 해당하는 표현을 사용할 수도 있어요.

switch{

case 표현식: 수행 구문

case 표현식: 수행 구문

default: 수행 구문

}

다음은 두 수를 입력받아 큰 수를 출력하는 예제입니다. 여기에서는 case x>y: case x<y:와 같은 표현을 사용하였습니다.

// Example switch 뒤에 아무 것도 안 올 때
package main

import "fmt"

func main() {
	var x, y int
	fmt.Print("두 개의 정수 입력:")
	fmt.Scanln(&x, &y)

	switch {
	case x > y:
		fmt.Println("큰 값:", x)
	case x < y:
		fmt.Println("큰 값:", y)
	default:
		fmt.Println("두 수는 서로 같습니다.")
	}
}