Programming language/Golang

[Go] 10 switch

chaenii 2022. 1. 12. 22:50

본 게시물은 Tucker의 Go언어 프로그래밍을 참고해 작성한 게시물입니다.

http://www.yes24.com/Product/Goods/99108736

 

Tucker의 Go 언어 프로그래밍 - YES24

게임 회사 서버 전문가가 알려주는 Go 언어를 내 것으로 만드는 비법구글이 개발한 Go는 고성능 비동기 프로그래밍에 유용한 언어이다. 『Tucker의 Go 언어 프로그래밍』은 Go 언어로 ‘나만의 프로

www.yes24.com

 

switch 동작 원리

switch문은 값에 따라 다른 로직을 수행할 때 사용한다. switch문 구조는 다음과 같다.

switch 비굣값 { // 검사하는 값이 온다. 
case1:      // 비굣값과 값1이 같을 때 수행한다.
  문장
case2:      // 비굣값과 값2가 같을 때 수행한다.
  문장
default:       // 만족하는 case가 없을 때 수행한다.
  문장
}

 

switch문을 쓰는 이유

switch문을 이용하면 복잡한 if else문을 보기 좋게 정리할 수 있다.

if문을 사용한 예제보다 switch문을 사용한 예제가 가독성이 더 좋다.

 

다양한 switch문 형태

한 번에 여러 값 비교

하나의 case는 하나 이상의 값을 비교할 수 있다. 각 값은 쉼표로 구분한다.

day := "sunday"

switch day {
case "sunday", "saturday":
    fmt.Println("주말입니다!")
default:
    fmt.Println("평일입니다. 출근하세요")
}

 

조건문 비교

switch문의 동작을 응용하면 단순히 값만 비교하는 게 아닌 if문처럼 true가 되는 조건문을 검사할 수 있다.

switch문은 비굣값과 case의 값이 같아지는 경우를 찾는 구문이기 때문에 비굣값을 true로 할 경우 case의 조건문이 true가 되는 경우 실행된다.

switch true {
case temp < 10, temp > 30:
    fmt.Println("바깥 활동하기 좋은 날씨가 아닙니다.")
case temp >= 10 && temp < 20:
    fmt.Println("약간 추울 수 있으니 가벼운 겉옷을 준비하세요.")
case temp >= 15 && temp < 25:
    fmt.Println("야외 활동하기 좋은 날씨입니다.")
default:
    fmt.Println("따뜻합니다.")
}

 

switch 초기문

if문과 마찬가지로 switch문에서도 초기문을 넣을 수 있다.

switch 초기문; 비굣값 {
case1:
  ...
case2:
  ...
case3:
  ...
default:
}
switch age := getMyAge(); age {
case 10:
    fmt.Println("Teenage")
case 33:
    fmt.Println("Pair 3")
default:
    fmt.Println("my age is", age)
}

// fmt.Println("my age is", age) // Error - age 변수는 사라졌다.

 

const 열거값과 switch

const 열거값에 따라 수행되는 로직을 변경할 때 switch문을 주로 사용한다.

색깔을 나타내는 열거값을 문자열로 바꾸는 함수를 switch문을 사용해 만든다.

type ColorType int // 별칭 ColorType을 선언하고 const 열거값 정의

const (
	Red ColorType = iota
	Blue
	Green
	Yellow
)

// 각 ColorType 열거값에 따른 문자열을 반환하는 함수
func colorToString(color ColorType) string {
	switch color {
	case Red:
		return "Red"
	case Blue:
		return "Blue"
	case Green:
		return "Green"
	case Yellow:
		return "Yellow"
	default:
		return "Undefined"
	}
}

func getMyFavoriteColor() ColorType {
	return Blue
}

func main() {
	fmt.Println("My favorite color is", colorToString(getMyFavoriteColor()))
}

 

break와 fallthrough 키워드

일반적으로 다른 언어에서는 switch문의 각 case 종료 시에 break문을 사용해야 다음 case로 코드가 이어서 실행되지 않는다.

하지만, Go언어에서는 break를 사용하지 않아도 case하나를 실행 후 자동으로 switch문을 빠져나가게 된다. 

만약에 하나의 case문 실행 후 다음 case문까지 같이 실행하고 싶을 땐 fallthrough 키워드를 사용한다.

a := 3
switch a {
case 1:
    fmt.Println("a == 1")
case 2:
    fmt.Println("a == 2")
    break
case 3:
    fmt.Println("a == 3")
    fallthrough
case 4:
    fmt.Println("a == 4")
default:
    fmt.Println("a > 4")
}
반응형

'Programming language > Golang' 카테고리의 다른 글

[Go] 12 배열  (0) 2022.01.15
[Go] 11 for문  (0) 2022.01.15
[Go] 09 조건문  (0) 2022.01.12
[Go] 08 상수  (0) 2022.01.11
[Go] 07 함수  (0) 2022.01.11