Menu
Coddy logo textTech

타입 스위치

Coddy GO 여정의 로직 & 흐름 섹션에 포함된 레슨 — 68개 중 18번째.

타입 단언(type assertions)은 단일 타입을 확인하는 데 잘 작동하지만, 인터페이스 변수에 대해 여러 가능한 타입을 처리해야 하는 경우가 많습니다. 이럴 때 타입 스위치(type switch)가 매우 유용합니다. 이는 구체적인 타입(concrete type)에 따라 서로 다른 동작을 수행할 수 있는 깔끔한 방법을 제공합니다.

타입 스위치(type switch)는 다음과 같은 특수한 구문을 사용합니다: switch v := i.(type). 특정 타입 대신 (type) 키워드를 사용한 점에 주목하십시오. 변수 v는 각 케이스에서 해당 구체적인 타입의 실제 값을 갖게 됩니다:

func describe(data interface{}) {
    switch v := data.(type) {
    case int:
        fmt.Printf("Integer: %d\n", v)
    case string:
        fmt.Printf("String: %s\n", v)
    case bool:
        fmt.Printf("Boolean: %t\n", v)
    default:
        fmt.Printf("Unknown type: %T\n", v)
    }
}

각 경우에 v는 자동으로 올바른 타입을 갖게 되며, 추가적인 타입 단언(type assertion)이 필요하지 않습니다. 이는 특히 한 곳에서 여러 다른 타입을 처리해야 할 때, if-else 문으로 여러 타입 단언을 연결하는 것보다 타입 스위치를 훨씬 더 깔끔하게 만들어 줍니다.

quiz icon실력 점검

이 레슨에는 짧은 퀴즈가 포함되어 있습니다. 레슨을 시작해 문제를 풀고 진행 상황을 기록하세요.

quiz icon실력 점검

이 레슨에는 짧은 퀴즈가 포함되어 있습니다. 레슨을 시작해 문제를 풀고 진행 상황을 기록하세요.

quiz icon실력 점검

이 레슨에는 짧은 퀴즈가 포함되어 있습니다. 레슨을 시작해 문제를 풀고 진행 상황을 기록하세요.

challenge icon

챌린지

쉬움

이 챌린지에서는 알림 시스템에서 여러 데이터 타입을 처리하기 위해 타입 스위치(type switches)를 사용하는 연습을 합니다. 다양한 유형의 알림을 처리하고 구체적인 타입에 따라 적절하게 형식을 지정하는 함수를 만들게 됩니다.

두 개의 입력을 받게 됩니다:

  • 알림 유형을 나타내는 문자열 (예: "email", "sms", "push", 또는 "alert")
  • 알림 내용 또는 값을 나타내는 문자열

여러분의 과제는 다음과 같습니다:

  1. interface{} 매개변수를 받는 processNotification이라는 함수를 생성합니다.
  2. 입력된 알림 유형에 따라 내용을 적절한 Go 타입으로 변환하고 interface{} 변수에 저장합니다:
    • "email"의 경우: 내용을 문자열(string)로 사용합니다.
    • "sms"의 경우: 내용을 정수(int, 글자 수를 나타냄)로 변환합니다.
    • "push"의 경우: 내용을 불리언(bool, "enabled"인 경우 true, 그 외에는 false)으로 변환합니다.
    • "alert"의 경우: 내용을 float64(우선순위 레벨을 나타냄)로 변환합니다.
  3. 변환된 값을 사용하여 processNotification 함수를 호출합니다.
  4. processNotification 내부에서 타입 스위치를 사용하여 각 타입을 처리하고 적절한 메시지를 출력합니다:
    • string의 경우: "Email notification: [value]"
    • int의 경우: "SMS notification with [value] characters"
    • bool의 경우: "Push notifications: [value]"
    • float64의 경우: "Alert with priority: [value]"
    • 그 외의 다른 타입의 경우: "Unknown notification type"

문자열 변환을 위해 strconv 패키지를 사용하세요. 불리언 변환의 경우, "enabled"인 경우에만 true가 되어야 합니다. 이 챌린지는 타입 스위치가 단일 제어 구조에서 여러 타입을 처리하는 깔끔한 방법을 제공하며, 각 케이스에서 올바른 타입의 값을 자동으로 제공하는 방법을 보여줍니다.

치트 시트

타입 스위치(type switch)는 switch v := i.(type) 구문을 사용하여 인터페이스 변수에 대해 가능한 여러 타입을 깔끔하게 처리하는 방법을 제공합니다:

func describe(data interface{}) {
    switch v := data.(type) {
    case int:
        fmt.Printf("Integer: %d\n", v)
    case string:
        fmt.Printf("String: %s\n", v)
    case bool:
        fmt.Printf("Boolean: %t\n", v)
    default:
        fmt.Printf("Unknown type: %T\n", v)
    }
}

각 케이스에서 변수 v는 자동으로 올바른 구체 타입(concrete type)을 가지게 되므로, 추가적인 타입 단언(type assertion)이 필요하지 않습니다.

직접 해보기

package main

import (
	"fmt"
	"strconv"
)

func main() {
	// 입력 읽기
	var notificationType string
	var content string
	fmt.Scanln(&notificationType)
	fmt.Scanln(&content)
	
	// TODO: 아래에 코드를 작성하세요
	// 1. interface{} 매개변수를 받는 processNotification 함수 생성
	// 2. notificationType에 따라 content를 적절한 타입으로 변환
	// 3. 변환된 값으로 processNotification 호출
	// 4. processNotification 내부에서 타입 스위치를 사용하여 다양한 타입 처리
	
}
quiz icon실력 점검

이 레슨에는 짧은 퀴즈가 포함되어 있습니다. 레슨을 시작해 문제를 풀고 진행 상황을 기록하세요.

로직 & 흐름의 모든 레슨