[Go] 6. 조건문 - switch-case

garam0410·2021년 4월 12일
0

Golang

목록 보기
6/6
post-thumbnail

Switch-case

앞의 포스트에서 if-else를 활용한 사칙연산 프로그램을 만들어 봤다. if-else를 활용하여 조건문을 만들고, 조건문에 따라서 프로그램이 수행되는 것을 확인해 볼 수 있었다.

Golang에서 또다른 조건문이 있는데, 바로 Switch-case 문이다.
둘다 조건문에 따라서 프로그램이 수행되는 방식이라서, if-else 문을 switch-case 문으로도 바꿀 수 있다.


Switch-case 구조

Switch-case의 구조는 이런형태이다.

switch{
	case 결과 :
    		.....
    	case 결과 : 
    		.....
    	case 결과 : 
    		.....
        default : 
        	.....
}

값과 결과를 비교해서 같은 조건의 case가 동작하는 방식이다.


간단한 예제

GO 소스파일

package main

import "fmt"

func main() {
	var x = 32

	switch x {
	case 31:
		fmt.Println("x = 31")
	case 32:
		fmt.Println("x = 32")
	case 33:
		fmt.Println("x = 33")
	}
}

위 코드는 switch-case를 활용한 간단한 예제 이다. 변수 x의 값에 따라서 case문이 동작하는 것을 확인할 수 있다.

switch-case안의 이 들어가는 부분을 생략할 수도 있다. 이 생략될 경우, 기본적으로 True가 들어간다.

package main

import "fmt"

func main() {
	var x = 33

	switch  {
	case x > 40 :
		fmt.Println("x는 40보다 크다")
	case x < 20 :
		fmt.Println("x는 20보다 작다")
	case x > 30 :
		fmt.Println("x는 30보다 크다")
    	case x == 33 : 
    		fmt.Println("x는 33")
	}
}

위 코드를 보면, 에 해당하는 부분이 비어있기 때문에, True일 경우의 case만을 찾게 된다. 그런데, case안의 조건에 따라서 True인 부분을 찾으면 2개의 case가 나온다. 이때는, 위에서부터 먼저 찾은 case문을 따르게 되기 때문에, 출력하면 3번째 케이스가 추력되게 된다.


Switch-case 변환

GO 소스파일

//사칙연산 프로그램

package main

import (
	"bufio" //입력을 읽기 위한 라이브러리
	"fmt"
	"os"      //표준 입력을 받기위한 라이브러리
	"strconv" //문자열을 숫자로 바꿔주는 라이브러리
	"strings" //불필요한 문자를 삭제하기 위한 라이브러리
)

func main() {

	fmt.Println("숫자를 입력하세요")

	var reader = bufio.NewReader(os.Stdin) // reader에 입력 받을 준비
	var line, _ = reader.ReadString('\n')  // 엔터(줄바꿈)할 때 까지 입력 받음
	line = strings.TrimSpace(line)         // 문자열의 공백 제거

	var n1, _ = strconv.Atoi(line) // 입력받은 값을 숫자로 바꿔서 n1에 저장

	//입력 반복
	line, _ = reader.ReadString('\n')
	line = strings.TrimSpace(line)

	var n2, _ = strconv.Atoi(line) // 입력받은 값을 숫자로 바꿔서 n2에 저장

	fmt.Printf("입력하신 숫자는 %d, %d 입니다\n", n1, n2) // n1, n2 출력

	fmt.Println("연산자를 입력하세요")

	line, _ = reader.ReadString('\n') // 엔터(줄바꿈)할 때 까지 입력 받음
	line = strings.TrimSpace(line)    // 문자열의 공백 제거

	//연산자 조건 검사
	if line == "+" {
		fmt.Printf("%d + %d = %d", n1, n2, n1+n2)
	} else if line == "-" {
		fmt.Printf("%d - %d = %d", n1, n2, n1-n2)
	} else if line == "*" {
		fmt.Printf("%d * %d = %d", n1, n2, n1*n2)
	} else if line == "/" {
		fmt.Printf("%d / %d = %d", n1, n2, n1/n2)
	} else {
		fmt.Println("잘못 입력하셨습니다.")
	}
}

위 코드는, 지난 포스트에 있던 if-else를 활용한 사칙연산 프로그램이다. 우리는 이것을, switch-case 문으로 바꿀 수가 있다.

GO 소스파일

//사칙연산 프로그램

package main

import (
	"bufio" //입력을 읽기 위한 라이브러리
	"fmt"
	"os"      //표준 입력을 받기위한 라이브러리
	"strconv" //문자열을 숫자로 바꿔주는 라이브러리
	"strings" //불필요한 문자를 삭제하기 위한 라이브러리
)

func main() {

	fmt.Println("숫자를 입력하세요")

	var reader = bufio.NewReader(os.Stdin) // reader에 입력 받을 준비
	var line, _ = reader.ReadString('\n')  // 엔터(줄바꿈)할 때 까지 입력 받음
	line = strings.TrimSpace(line)         // 문자열의 공백 제거

	var n1, _ = strconv.Atoi(line) // 입력받은 값을 숫자로 바꿔서 n1에 저장

	//입력 반복
	line, _ = reader.ReadString('\n')
	line = strings.TrimSpace(line)

	var n2, _ = strconv.Atoi(line) // 입력받은 값을 숫자로 바꿔서 n2에 저장

	fmt.Printf("입력하신 숫자는 %d, %d 입니다\n", n1, n2) // n1, n2 출력

	fmt.Println("연산자를 입력하세요")

	line, _ = reader.ReadString('\n') // 엔터(줄바꿈)할 때 까지 입력 받음
	line = strings.TrimSpace(line)    // 문자열의 공백 제거

	//연산자에 따라서 case 실행
	switch line {
	case "+":
		fmt.Printf("%d + %d = %d", n1, n2, n1+n2)
	case "-":
		fmt.Printf("%d - %d = %d", n1, n2, n1-n2)
	case "*":
		fmt.Printf("%d * %d = %d", n1, n2, n1*n2)
	case "/":
		fmt.Printf("%d / %d = %d", n1, n2, n1/n2)
	default:
		fmt.Println("잘못 입력하셨습니다.")
}

0개의 댓글