분기문
분기문인 switch에 대해 알아보자.
swich문에 의한 선택적 실행
switch문은 기본적으로 변수를 가져와 switch 옆에 '태그'로 사용
합니다. 변수는 어느 자료형이든
쓸 수 있습니다. 태그의 값에 따라 case의 '라벨'과 일치
하는 것을 찾고 일치하는 case의 구문을 수행합니다.
Go언어에서는 switch 옆에 태그뿐만이 아니라 '표현식'
을 쓰는 경우가 있습니다. 그리고 case 옆에도 라벨뿐만이 아니라 참/거짓을 판별
할 수 있는 표현식을 쓰는 경우도 있습니다. 태그나 표현식이 어느 조건에도 맞지 않는다면 default문을 사용해 해당 구문을 수행합니다.
또한, 굳이 if문처럼 블록 시작 브레이스({)를 같은 줄에 쓰지 않아도 실행
이 됩니다. 그리고 break를 따로 입력하지 않아도
해당되는 case만 수행합니다. C언어에서는 break가 없으면 모든 case를 실행하는 것과 ` 대조적`입니다.
switch 태그/표현식{
case 라벨/표현식:
수행구문
case 라벨/표현식:
수행구문
...
default 라벨/표현식:
수행구문
}
쓰임새가 비교적 넓은 Go언어에서의 switch문
C언어와 같은 언어는 switch문의 사용이 굉장히 제한적
입니다. switch문에 전달되는 인자가 반드시 필요하고, 정수형 변수(char 형도 포함)
여야합니다. 그리고 전달되는 인자가 정수형 변수이기 때문에 case옆에 쓰이는 라벨도 상수 형태로만
쓰일 수 있어서 식을 쓸 수 없습니다. 마치 판별이 아닌 선택만을 위한 역할
을 한다고 볼 수 있습니다.
하지만 Go언어에서는 참/거짓을 판별하는 조건식(표현식)
은 쓸 수 있다는 것입니다. 이제는 Go언어에서 switch문이 어떻게 쓰이는 지 알아보겠습니다.
1. switch에 전달되는 인자로 태그 사용
2. switch에 전달되는 인자로 표현식 사용
3. switch에 전달되는 인자 없이 case에 표현식 사용(참/거짓 판별)
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("모르겠어요.")
}
}
//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)
}
//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("모르겠어요.")
}
}
다른 언어에서는 switch문의 쓰임에 제한이 많아 활용도 제한적
이었지만, Go언어에서는 쓰임새가 확장되어 조건문을 독점하다시피했던 if문의 지분을 많이 차지
할 수 있습니다. 따라서 if ~else if문을 사용할지 switch문을 사용할지는 취향에 따른 문제
입니다. 보통 조건이 많지 않다면 if ~else if, 조건이 많다면 switch문을 사용
합니다.