Golang Switch

soso·2023년 10월 4일
0

묘공노트

목록 보기
6/13
post-custom-banner

• 이 글은 골든래빗 《Tucker의 Go 언어 프로그래밍》의 10장 써머리입니다.


10-1. switch문 동작원리

  • 값에 따라 다른 로직을 수행할 때 사용
  • 비굣값과 case의 값이 같을 때 문장을 수행하고 종료
     func manin() {
       a := 3
    
       switch a {  // a : 비굣값
         case 1 :                 // 비굣값과 1 (case 값)이 같을 때 
           fmt.Println("a == 1")  // 수행하는 문장 
         case 2 :                // 비굣값과 2 (case 값)이 같을 때 
           fmt.Println("a == 2") // 수행하는 문장 
         case 3 :                // 비굣값과 3 (case 값)이 같을 때 
           fmt.Println("a == 3") // 수행하는 문장
         default:               // 해당하는 case 값이 없을 때 (default는 생략가능)
           fmt.Println("a > 3") // 수행하는 문장
       }
     }
     //  콘솔 : a==3  출력

10-2. switch문을 사용하는 경우

  • 복잡하고 많은 if-else문을 정리
    • if - else
    • switch 문으로 변경

10-3. switch 문의 형태

  • 다양한 형태의 switch문을 사용할 수 있다

📌 한번에 여러 값을 비교

  • 각 값은 쉼표(,) 로 구분
func main(){
  day := "thurseday"

  switch day {
    case "monday", "tuesday" : // 쉼표로 구분하여 여러 값을 비교
      fmt.Println("수업이 있는 날 입니다")
    case "wednesday", "thursday", "friday":
      fmt.Println("실습이 있는 날 입니다")
    }
  }

// 콘솔 : 실습이 있는 날입니다

📌 조건문 비교

  • if 문과 같이 true 조건문 검사 가능
    해당 case의 조건에 true이면 수행 문 실행
func main(){
  temp := 18

  switch true {
   case temp < 10, temp > 30:  
      fmt.Println("바깥 활동하기 좋은 날씨가 아닙니다")

   case temp >= 10 && temp < 20 : // temp 18 이 해당 case 값을 만족하여
      fmt.Println("약간 추울 수 있습니다") // 로직이 실행되고 종료. 
                                        // 아래 조건들은 검사하지 않는다.
   case temp >= 15 && temp < 25 :
      fmt.Println("야외 활동하기 좋은 날씨입니다")

    default : 
      fmt.Println("따뜻합니다")
    }
  }

// 콘솔 : 약간 추울 수 있습니다
  • switch 다음에 비굣값을 적지 않는 경우 : default 값으로 true 사용
   switch true {
      ...
    }

   // 아래와 같이 줄여 쓰기 가능 (true 생략)
   switch { 
     ...
   }

📌 switch 초기문

  • 초기문 작성 가능 (if문과 같은 구조)
sitch 초기문; 비굣값 {
	case 값1 :
      ...
    case 값2 :
      ...
    default:
}
  • 예제 1
func getMyAge() int {
	return 22
}

func main() {
// age := getMyAge(); : 초기문; age : 비굣값
	switch age := getMyAge(); age { // getMyAge() 결괏값 비교
    	case 10 :
        	fmt.Println("10대")
        case 30:
        	fmt.Println("30대")
        default:
        	fmt.Println("내 나이는", age) // age 값 사용
        }
     fmt.Println("switch문 밖의 age", age) 
  // 콘솔 : undefined로 출력 -> 비굣값 변수 age : switch문 안에서만 사용 
  //       (에러 - age 변수 사라짐)
 }
  • 초기문으로 age 값 초기화, 비굣값을 true로 조건문 작성
func getMyAge() int {
	return 22
}

func main() {
// age := getMyAge(); : 초기문; true 인 case 찾기
 switch age := getMyAge(); true { // age 변수 선언 및 초기화
// 이렇게 쓸 수 있다 -> switch age := getMyAge();{  true는 생략 가능
    	case age < 20 :
        	fmt.Println("10대")
        case age < 30:
        	fmt.Println("20대")
        default:
        	fmt.Println("내 나이는", age) // true 조건 달성
        }
 }
   // 콘솔 출력 : 20대

10-4. const 열거값과 switch

const 열거값에 따른 수행 로직을 siwtch문으로 작성할 수 있다

 type ColorType int // ColorType 선언 및 상수 const 열거값 정의
 const (
 	Red ColorType = iota
    Blue
    Green
 )

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

  func main(){
  	fmt.Println("My Color is",colorToString(Blue))
 }

 // 콘솔 출력 : My Color is Blue         

10-5. break, fallthrough

📌break

  • break를 사용하지 않아도 case 하나 실행 후 자동으로 switch문 종료
    (Go언어 특성)
func main(){
  a := 3

  switch a {
  	case 1: 
	  fmt.Println("a == 1")
    break
    case 2:
  	  fmt.Println("a == 2") 
    case 3:
  	  fmt.Println("a == 3") // break 없어도 알아서 실행 후 종료
    case 4:
  	  fmt.Println("a == 4") 
    default:
  	  fmt.Println("a > 4")
   }
 }
 // 콘솔 출력 : a == 3 

📌fallthrough

  • case 실행 후 다음 case 문까지 실행할 때 사용
func main(){
  a := 3

  switch a {
  	case 1: 
	  fmt.Println("a == 1")
    break
    case 2:
  	  fmt.Println("a == 2") 
    case 3:
  	  fmt.Println("a == 3") 
      fallthrough // 다음 case문까지 이어서 실행
    case 4:
  	  fmt.Println("a == 4") 
    default:
  	  fmt.Println("a > 4")
   }
 }
 // 콘솔 출력 : a == 3
 //            a == 4
post-custom-banner

0개의 댓글