fallthrough는 case 조건을 계층으로 구성할 때 효과적이다. 어떤 값의 레벨에 따라 이전 레벨에서 수행한 작업에 추가 작업을 더 수행해야 할 때 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 문에 변수를 쓰지 않으면 첫 번째로 true인 case 조건을 수행한다.
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보다 큽니다”) }