더북(TheBook)

fallthroughcase 조건을 계층으로 구성할 때 효과적이다. 어떤 값의 레벨에 따라 이전 레벨에서 수행한 작업에 추가 작업을 더 수행해야 할 때 fallthrough를 사용하면 다음 case로 이동하여 추가 작업을 수행할 수 있다.

switch level {
case 1:
    doFirst()  // level이 1일 때 수행
    fallthrough
case 2:
    doSecond() // level이 1 또는 2일 때 수행
    fallthrough
case 3:
    doThird()  // level이 1,2 또는 3일 때 수행
}

Go 코드 컨벤션

case 조건을 계층으로 구성하는 것이 아니라, 다음 case로 넘겨서 한꺼번에 처리할 때는 fallthrough를 사용하는 것보다 case에 조건을 여러 개 넣는 것이 더 낫다. 먼저 fallthrough를 사용한 코드를 보자.

switch i {
case 0: fallthrough
    case 1:
    f()
}

위 코드보다 다음과 같이 case 하나에 조건 여러 개를 넣은 코드가 더 깔끔하다.

switch i {
case 0, 1:
    f()
}

switch 문에 변수를 쓰지 않으면 첫 번째로 truecase 조건을 수행한다.

swtich {
case 조건식1:
    ...
case 조건식2:
    ...
defalut:
    ...
}

다음과 같이 작성할 수 있다.


package main
  
import "fmt"
  
func main() {
    i := -2
    switch {
    case i < 0:
        fmt.Println(i, "는 음수입니다.")
    case i == 0:
        fmt.Println(i, "는 0입니다.")
    case i > 0:
        fmt.Println(i, "는 양수입니다.")
    }
}

실행 결과

-2 는 음수입니다.

이는 if-else 구문과 유사하게 동작한다. if 문에 else를 많이 써야 한다면 switch 문을 사용하는 게 가독성이 더 좋다.

if 문과 마찬가지로 switch 문에도 초기화 구문을 작성할 수 있다. 초기화 구문을 작성할 때는 구문 끝에 세미콜론을 써야 한다. 초기화 구문에 선언된 변수는 switch 문 내에서만 사용할 수 있다.

switch a, b := x[i], y[j]; {
case a < b:
    fmt.Println(“a는 b보다 작습니다”)
case a == b:
    fmt.Println(“a와 b는 같습니다”)
case a > b:
    fmt.Println(“a는 b보다 큽니다”)
}

신간 소식 구독하기
뉴스레터에 가입하시고 이메일로 신간 소식을 받아 보세요.