한 눈에 끝내는 고랭 기초
    • 01
      시작하기에 앞서
    • 강의대상
      Go란?
      실습 환경 구축 - 구름IDE
      Hello goorm! 출력해보기
    • 02
      변수와 상수
    • 콘솔 출력 함수의 기본
      변수의 선언과 초기화
      상수의 선언과 초기화
      간단한 덧셈
      잘못된 신상정보
    • 03
      연산자
    • 연산자 종류
      연산자 우선순위
      콘솔 입력 함수의 기본
      간단한 덧셈과 곱셈
      몫과 나머지
    • 04
      자료형
    • 자료형의 종류와 특징
      문자열의 표현
      자료형의 변환
      강제 형 변환
    • 05
      콘솔 출력과 입력 함수
    • 콘솔 출력 함수(Print)
      콘솔 입력 함수(Scan)
      정돈된 표
      신상정보 입력과 출력
    • 06
      반복문 - for
    • 오로지 for
      구구단
      빛나는 이등변삼각형
    • 07
      조건문 - if/else
    • 조건에 따른 실행과 흐름 분기
      7과 9의 배수
      두 수의 차
    • 08
      분기문 - switch
    • swich문에 의한 선택적 실행
      안좋은 계산기
    • 09
      제어문
    • break, continue, goto문
      구구단2
      두 수를 더하면 99
    • 10
      컬렉션
    • 배열(Array)
      슬라이스(Slice)
      맵(Map)
      역행렬
      가장 긴 이름
      중간고사 평균 점수
    • 11
      함수
    • Go언어에서의 함수
      전역변수와 지역변수
      매개변수
      반환값(리턴값)
      익명 함수
      오름차순 정렬
      아이패드를 사주는 조건
      역학적 에너지
    • 12
      클로저
    • 외부 변수 접근 : 클로저
      동전 정리
    • 13
      구조체와 메소드
    • 구조체
      메소드
      성적 저장 프로그램
      역학적 에너지2
    • 14
      인터페이스(interface)
    • 메소드의 집합 인터페이스
      직육면체와 원기둥
    • 15
      defer와 panic()
    • 지연 처리 defer
      종료하는 panic(), 복구하는 recover()
      엘리베이터
      중간고사 평균 점수2
    • 16
      에러 처리
    • 에러 처리의 기본
      에러 출력 및 처리
      중간고사 평균 점수3
    • 17
      고루틴(Goroutine)
    • 비동기 프로세스의 기본
      고루틴의 활용
      고루틴 실습
    • 18
      채널(Channel)
    • 고루틴의 데이터 통로 : 채널
      비동기 채널과 버퍼
      동기 채널
      채널 닫기
      송신 전용, 수신 전용 채널
      채널 select문
      고루틴 실습2
      메시지 전송
      동기 채널 실습
      비동기 채널 실습
    • 19
      패키지(package)
    • 패키지의 개념
    • 20
      실전 프로젝트 - 마일리지 상점
    • 프로젝트를 시작하기 앞서
      실습모드에서 실습
      마일리지 상점의 주요 기능
      필수 구조체와 매인 메뉴
      잔여 수량, 잔여 포인트 구현
    • 21
      실전 프로젝트 - 주문하기, 장바구니 담기
    • 구매 구현(1)
      구매 구현(2)
      장바구니에 담기
      장바구니 확인(1)
      장바구니 확인(2)
    • 22
      실전 프로젝트 - 고루틴으로 배송하기
    • 배송 상태 확인(1)
      배송 상태 확인(2)
      배송 상태 확인(3)
      최종 코드
    swich문에 의한 선택적 실행
    08 분기문 - switch
    swich문에 의한 선택적 실행

    이번 챕터에서 배울 Switch문의 내용은 이전 챕터의 조건문과 흐름을 같이하고있습니다. 바로 '조건에 따른 흐름 분기'라는 내용입니다.

    이 말은 어떠한 조건이 주어졌을 때 그 조건과 맞는 부분을 실행함을 의미합니다. 하지만 조금 다른 부분이 있습니다. 예를 들어, if ~else if문은 num이 1일 때 이 조건과 맞는 조건문을 하나씩 검토해서 출력하는 느낌입니다. '여기는 2일때.. 여기는 3일때.. 여기는 4일때.. 여기가 1일때 실행하는 곳이구나!'라는 느낌이죠. 하지만 switch문은 num이 1이면 라벨이 1인 곳을 딱 찾아내서 수행 구문을 실행시키는 느낌입니다. '음.. 1일때 실행해야 하는 곳이.. 바로 여기구나!'라는 느낌이죠.


    switch문은 기본적으로 변수를 가져와 switch 옆에 '태그'로 사용합니다. 변수는 어느 자료형이든 쓸 수 있습니다. 태그의 값에 따라 case의 '라벨'과 일치하는 것을 찾고 일치하는 case의 구문을 수행합니다. Go언어에서는 switch 옆에 태그뿐만이 아니라 '표현식'을 쓰는 경우가 있습니다. 그리고 case 옆에도 라벨뿐만이 아니라 참/거짓을 판별할 수 있는 표현식을 쓰는 경우도 있습니다. 그리고 태그나 표현식이 어느 조건에도 맞지 않는다면 default문을 사용해 해당 구문을 수행합니다.


    그리고 굳이 if문처럼 블록 시작 브레이스({)를 같은 줄에 쓰지 않아도 실행이 됩니다. 그리고 break를 따로 입력하지 않아도 해당되는 case만 수행합니다. C언어에서는 break가 없으면 모든 case를 실행하는 것과 대조적입니다.


    아래 switch문의 형식과 예시 코드를 보면 이해가 쉽습니다. 

    go
    go
    실행 결과를 확인해보세요!

    사실 위의 형식은 Go언어 switch문에만 해당됩니다. C언어와 같은 언어는 switch문의 사용이 굉장히 제한적입니다. switch문에 전달되는 인자가 반드시 필요하고, 정수형 변수(char 형도 포함)여야합니다. 그리고 전달되는 인자가 정수형 변수이기 때문에 case옆에 쓰이는 라벨도 상수 형태로만 쓰일 수 있어서 식을 쓸 수 없습니다.  쉽게 말해서 참/거짓을 판별하는 조건식은 쓸 수 없다는 것입니다. 판별이 아닌 선택만을 위한 역할을 한다고 볼 수 있습니다. 

    아래는 C언어에서 활용되는 switch문의 대표적인 쓰임새입니다. 역시 해당되는 태그와 일치하는 라벨의 case만 실행하기 위해 break를 전부 입력했습니다.

    c

    쓰임새가 비교적 넓은 Go언어에서의 switch문


    앞서 Go언어에서의 switch문의 형태와 예시에 대해 보여주고, C언어에서는 switch문이 제한적으로 쓰인다는 것을 예시와 함께 알아보았습니다.

    이제는 Go언어에서 switch문이 어떻게 쓰이는 지 알아보겠습니다.


    • switch에 전달되는 인자로 태그 사용
    • switch에 전달되는 인자로 표현식 사용
    • switch에 전달되는 인자 없이 case에 표현식 사용(참/거짓 판별)


    각각의 경우를 예시 코드를 보면서 확인해보겠습니다.

    go
    실행 결과를 확인해보세요!

    위 예시 코드는 일부러 if문 조건식을 사용했습니다. "apple", "banana", "grape" 세 개 이외의 값을 입력하면 "잘못 입력했습니다." 라는 구문이 출력되고 프로그램이 종료됩니다. 여기서 알아야 할 점이 있습니다.

    • defualt문을 사용하지 않으면 if문을 사용해 따로 예외 처리를 해야하기 때문에 코드가 길어집니다.
    • "return"을 실행하면 해당 함수가 종료됩니다. main 함수 안에서 return은 main 함수를 종료한다는 것을 의미하기 때문에 프로그램이 종료됩니다.
    go
    실행 결과를 확인해보세요!

    위 예시는 default문을 사용해 예외 처리를 했습니다. 그리고 return을 입력하지 않았다면 "모르겠어요."를 출력한 뒤 아래 줄인 fmt.Println(result)를 실행합니다. 따라서 아무 값도 초기화되지 않은 result는 빈칸으로 출력됩니다. 불 필요한 실행을 막기 위해 잘못된 입력이 되면 return으로 프로그램을 종료한 것입니다.

    go
    실행 결과를 확인해보세요!

    이렇게 switch문을 이용해서 여러 개의 조건을 처리하는 것을 확인 할 수 있습니다.  switch문을 사용하면 앞서 다뤘던 if ~else if문으로 만든 코드를 동일하게  만들 수 있습니다. 다른 언어에서는 switch문의 쓰임에 제한이 많아 활용도 제한적이었지만, Go언어에서는 쓰임새가 확장되어 조건문을 독점하다시피했던 if문의 지분을 많이 차지할 수 있습니다. 따라서 if ~else if문을 사용할지 switch문을 사용할지는 취향에 따른 문제입니다. 보통 조건이 많지 않다면 if ~else if, 조건이 많다면 switch문을 사용합니다.

    질문하기