Go `switch` 구문에서 `fallthrough` 이해
Olivia Novak
Dev Intern · Leapcell

Key Takeaways
- Go의
switch
구문은 암묵적으로 fall through되지 않으며, 각 case는 자동으로 break됩니다. fallthrough
키워드를 사용하면 조건 없이 다음 case로 실행이 계속됩니다.fallthrough
는 case 블록의 마지막 구문이어야 하며, 마지막 case에서는 사용할 수 없습니다.
Go에서 switch
구문은 표현식의 값을 기반으로 효율적인 분기를 가능하게 하는 강력한 제어 구조입니다. 다른 일부 프로그래밍 언어와 달리 Go의 switch
구문은 일치하는 case를 실행한 후 자동으로 break되어 C 또는 JavaScript와 같은 언어에서 흔히 발생하는 fall-through 동작을 방지합니다. 그러나 후속 case를 실행해야 하는 시나리오가 있습니다. 이럴 때 fallthrough
키워드가 사용됩니다.
Go에서 switch
의 기본 동작
기본적으로 Go switch
구문에서 case가 일치하면 해당 case 내의 코드가 실행되고 제어 흐름이 switch
블록을 빠져나갑니다. 후속 case로의 암묵적인 fall-through는 없습니다. 다음은 이 동작을 보여주는 예입니다.
package main import ( "fmt" ) func main() { day := 3 switch day { case 1: fmt.Println("Monday") case 2: fmt.Println("Tuesday") case 3: fmt.Println("Wednesday") case 4: fmt.Println("Thursday") case 5: fmt.Println("Friday") default: fmt.Println("Weekend") } }
Output:
Wednesday
이 예에서 day
가 3
이므로 출력은 "Wednesday"입니다. 프로그램은 후속 case를 계속 실행하지 않습니다.
fallthrough
소개
fallthrough
키워드를 사용하면 해당 표현식의 평가와 관계없이 case
가 제어를 다음 case로 전달할 수 있습니다. 이는 여러 case를 순차적으로 실행해야 하는 시나리오에서 유용할 수 있습니다. 작동 방식은 다음과 같습니다.
package main import ( "fmt" ) func main() { num := 4 switch num { case 1: fmt.Println("One") fallthrough case 2: fmt.Println("Two") fallthrough case 3: fmt.Println("Three") fallthrough case 4: fmt.Println("Four") fallthrough case 5: fmt.Println("Five") default: fmt.Println("Number out of range") } }
Output:
Four
Five
Number out of range
이 예에서 num
이 4
이면 프로그램은 "Four"를 출력하고 fallthrough
구문으로 인해 다음 case의 코드를 계속 실행하여 "Five"를 출력한 다음 "Number out of range"를 출력합니다.
중요한 고려 사항
-
무조건적 전달:
fallthrough
키워드는 제어를 다음 case로 무조건 전달합니다. 다음 case의 표현식을 평가하지 않습니다. 따라서 의도하지 않은 동작을 피하기 위해 주의해서 사용하십시오. -
배치 제한:
fallthrough
구문은 case 블록의 마지막 구문이어야 합니다. 다른 위치에 배치하려고 하면 컴파일 타임 오류가 발생합니다. -
마지막 Case 제한: 제어를 전달할 후속 case가 없으므로
switch
구문의 마지막 case에서는fallthrough
를 사용할 수 없습니다.
실용적인 예
범위에 따라 숫자를 분류하려는 시나리오를 고려하십시오.
package main import ( "fmt" ) func main() { num := 75 switch { case num < 50: fmt.Printf("%d is less than 50\n", num) case num < 100: fmt.Printf("%d is less than 100\n", num) fallthrough case num < 200: fmt.Printf("%d is less than 200\n", num) } }
Output:
75 is less than 100
75 is less than 200
여기서 num
은 75
이므로 첫 번째 case(num < 50
)는 false이므로 건너뜁니다. 두 번째 case(num < 100
)는 true이므로 "75 is less than 100"을 출력한 다음 fallthrough
로 인해 다음 case로 진행하여 "75 is less than 200"을 출력합니다.
결론
Go의 fallthrough
키워드는 switch
구문에서 제어를 다음 case로 명시적으로 전달할 수 있는 메커니즘을 제공합니다. 이는 특정 시나리오에서 유용할 수 있지만 코드 명확성을 유지하고 예기치 않은 동작을 방지하기 위해 신중하게 사용하는 것이 중요합니다. 해당 동작 및 제한 사항을 이해하면 switch
구문이 의도한 대로 작동하도록 할 수 있습니다.
FAQs
아니요, Go의 switch
는 fallthrough
가 명시적으로 사용되지 않는 한 일치하는 case 후에 자동으로 break됩니다.
아니요, fallthrough
는 제어를 다음 case로 무조건 전달합니다.
실행할 후속 case가 없으므로 컴파일 타임 오류가 발생합니다.
Go 프로젝트 호스팅을 위한 최고의 선택, Leapcell입니다.
Leapcell은 웹 호스팅, 비동기 작업 및 Redis를 위한 차세대 서버리스 플랫폼입니다.
다국어 지원
- Node.js, Python, Go 또는 Rust로 개발하십시오.
무료로 무제한 프로젝트 배포
- 사용량에 대해서만 지불하십시오. 요청도 없고 요금도 없습니다.
탁월한 비용 효율성
- 유휴 요금 없이 사용량에 따라 지불합니다.
- 예: $25는 평균 응답 시간 60ms에서 694만 건의 요청을 지원합니다.
간소화된 개발자 경험
- 간편한 설정을 위한 직관적인 UI
- 완전 자동화된 CI/CD 파이프라인 및 GitOps 통합
- 실행 가능한 통찰력을 위한 실시간 메트릭 및 로깅
손쉬운 확장성 및 고성능
- 고도의 동시성을 쉽게 처리할 수 있는 자동 확장
- 운영 오버헤드가 전혀 없으므로 구축에만 집중하십시오.
설명서에서 자세히 알아보십시오!
X에서 팔로우하세요: @LeapcellHQ