728x90

스위치는 조건문중에서 조금 특이한 조건문이다.

아래의 예시를 보자.

package main

import "fmt"

func main() {
var a int
fmt.Print("0 과 100사이의 숫자를 입력하시오 : ")
fmt.Scan(&a)
if a >= 90 {
fmt.Print("수")
} else if a >= 80 {
fmt.Print("우")
} else if a >= 70 {
fmt.Print("미")
} else if a >= 60 {
fmt.Print("양")
} else {
fmt.Print("가")
}
fmt.Println("입니다.")
}

fmt.Print메소드는 Println과는 달리 출력해도 한줄을 띄어주지 않는다.

가령 위와 같은 소스코드를 보면 90점 이상이면 수... 이런식으로 구현된 코드이다.

이런 코드도 뭐 나쁘지는 않다. switch가 없는 언어(ex: python)등도 있으니까.

그러나 switch가 있다면 가독성으로 좀더 좋게 만들 수 있다.


switch

package main

import "fmt"

func main() {
var a int
fmt.Print("0 과 90사이의 숫자를 입력하시오 : ")
fmt.Scan(&a)
switch a / 10 {
case 9:
fmt.Print("수")
case 8:
fmt.Print("우")
case 7:
fmt.Print("미")
case 6:
fmt.Print("양")
default:
fmt.Print("가")
}
fmt.Println("입니다.")
}

switch문은 내부에 여러가지의 case로 이루어진다.

형태를 보자면 아래와 같다.


switch <식> {

case <값1>:

<구문1>

case <값2>:

<구문2>


...


case<값n>:

<구문n>

default:

<구문n+1>

}


위의 식을 보가 그 값에 따라서 그 구문을 실행하게 된다.



보다시피 제대로 실행되는 것을 확인할 수 있다.


이 포스팅을 보시는 분들은 대부분 아마 switch 다른 언어를 사용한 경력이 있을 것이다.

그리고 아마 다른 switch와 다른 부분이 있다.

다른 언어에서는 switch를 위와 같이 사용하면 아래 캐이스도 실행한다.

가령 67을 입력하면 양만 출력되는게 아니라 가도 출력된다는 의미이다.

그래서 break라는 문법을 써서 빠져나가야 한다.

그러나 go에서는 자동으로 break가 된다.

사실 switch를 쓰는 경우 트릭을 제외한다면 무조건 break를 넣기 때문이다.

그런데 기존의 switch를 그대로 쓰고싶다?

그런 사람들을 위한 문법이 존재한다.


package main

import "fmt"

func main() {
var a int
fmt.Print("0 과 90사이의 숫자를 입력하시오 : ")
fmt.Scan(&a)
switch a / 10 {
case 9:
fmt.Print("수")
fallthrough
case 8:
fmt.Print("우")
fallthrough
case 7:
fmt.Print("미")
fallthrough
case 6:
fmt.Print("양")
fallthrough
default:
fmt.Print("가")
}
fmt.Println("입니다.")
}

fallthrough - switch문 내에서 특정 캐이스에 도달했을 때 아래 캐이스를 모조리 실행한다.

이렇게 실행하면 다른언어의 break가 없는 것과 같은 효과를 낸다.



보다시피 우 이하의 모든 캐이스를 실행하게 된다.


package main

import "fmt"

func main() {
var a int
fmt.Print("0 과 90사이의 숫자를 입력하시오 : ")
fmt.Scan(&a)
switch {
case a >= 90:
fmt.Print("수")
case a >= 80:
fmt.Print("우")
case a >= 70:
fmt.Print("미")
case a >= 60:
fmt.Print("양")
default:
fmt.Print("가")
}
fmt.Println("입니다.")
}

지금까지의 switch(다른 언어들)은 숫자만 되거나(c, c++ 등) 숫자와 문자만 되거나(java, c# 등) 약간 반쪽짜리라는 느낌이 있었다.

그래서 switch를 사용하는 경우는 매우 특정상황에만 한정되어 있었다.

그러나 go에서는 switch에 식을 적지 않으면 case에서 식을 적을 수 있다.

그래서 if와 switch의 역활이 서로 거의 동등해 졌다.

다른 언어에서의 for과 while와 관계와 비슷해 져서 취향을 타는 편이다.

반면... while과 for은....



'Programming > Go' 카테고리의 다른 글

[Go-08]배열(Array)과 슬라이스(slice)  (0) 2018.08.31
[Go-07]반복문  (0) 2018.08.31
[Go-05]조건문  (0) 2018.08.31
[Go-04]연산자  (0) 2018.08.31
[Go-03]상수  (0) 2018.08.31

+ Recent posts