ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [Golang] 조건문 (if) & Switch문
    언어/Golang 2020. 2. 9. 16:48

    조건문 (if)

    파이썬과 동일하게 () 괄호를 사용하지 않아도 되고  조건문의 조건은 반드시 boolean 타입으로 나와야 합니다. Golang에서는 다른 언어와는 다르게 조건문의 코드 스타일을 강력하게 잡고 있습니다. if문 이후 else if 나 else의 시작은 다음 줄에서 시작할 수 없으며 if문이 끝나는 동일한 라인에서 선언해야 합니다.

    또한 조건문에 값을 선언하여 조건문 범위 내에서만 사용할 수 있습니다.

    package main
    
    import "fmt"
    
    func main() {
    	str := "123"
    	var i int = 100
    	var max int = 1000
    	if str == "12" {
    		fmt.Println("12")
    	} else if str == "23" {
    		fmt.Println("23")
    	} else {
    		fmt.Println("123")
    	}
    
    
    	if val := i * 2; val < max {
    		fmt.Println(val)
    	}
    	
    	// val은 if 조건문 내부에서만 접근이 가능하다.
    	fmt.Println(val) 
    
    }

    Switch

    다른 언어와 차이를 가지는 Golang만의 switch 기능을 설명합니다.

    1. switch 문의 기본 형태

    package main
    
    func main() {
       var text string
       var number = 1
    
       switch number {
       case 1:
          text = "Number 1"
       case 2:
          text = "Number 2"
       case 3, 4:
          text = "Number 3, 4"
       default:
          text = "Other"
       }
       println(text)
    }

    2. Swich 문에 표현식을 작성할 수 있음

    package main
    
    func main() {
       var text string
       var number = 1
       // number의 비트값을 왼쪽으로 2칸 이동 시킨다.
       switch x := number << 2; x - 1 {
       case 1:
          text = "Number 1"
       case 2:
          text = "Number 2"
       case 3, 4:
          text = "Number 3,4"
       default:
          text = "Other"
       }
       println(text)
    }

    3. case 문에 표현식을 작성할 수 있음

    package main
    
    func main() {
       var text string
       var number = 1
       switch number {
       case number - 1:
          text = "Number 1"
       case number << 1:
          text = "Number 2"
       case 3, 4:
          text = "Number 3,4"
       default:
          text = "Other"
       }
       println(text)
    }

    4. switch 뒤에 변수나 표현식이 없을 수 있음

    package main
    
    func main() {
       var text string
       var number = 1
    
       switch {
       case number == 1:
          text = "Number 1"
       case number > 1:
          text = "Number 2"
       case 2 < number && number < 5:
          text = "Number 3, 4"
       default:
          text = "Other"
       }
       println(text)
    }

    5. 다른 언어는 case 문에 break가 없으면 조건이 성립되도 다음 case문으로 내려가지만 GO는 컴파일러가 자동으로 break문을 각 case문마다 추가해주기 때문에 성립이 되면 바로 멈춤

    package main
    
    func main() {
       var text string
       var number = 1
       switch {
       case number == 0:
          text = "case 1"
       case number == 1:
          text = "case 2"
       case number > 0:
          text = "case 3"
       default:
          text = "Other"
       }
       println(text) // case 2
    }


    만약 case문을 계속 아래로 타게끔 하고 싶은 경우, fallthrough문을 사용합니다.

    package main
    
    func main() {
       var text string
       var number = 1
       switch {
       case number == 0:
          text = "case 1"
          fallthrough
       case number == 1:
          text = "case 2"
          fallthrough
       case number > 0:
          text = "case 3"
       default:
          text = "Other"
       }
       println(text) // case 3
    }

    6. 받은 변수의 타입에 따라 case문을 타도록 할 수 있음

    package main
    
    func main() {
       var v int
       v = 100
    
    
       switch conv_v := interface{}(v).(type) {
       case int:
          println(conv_v, "int")
       case bool:
          println(conv_v, "bool")
       case string:
          println(conv_v, "string")
       default:
          println(conv_v, "unknown")
       }
    }


    위와 같이 타입끼리 비교해야 하므로 interface 타입으로 변형을 시켜야 정상적으로 동작이 가능합니다.

    댓글