Menu
Coddy logo textTech

빈 인터페이스

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

지금까지는 특정 메서드를 요구하는 인터페이스를 다뤘지만, Go에는 매우 유연한 특별한 인터페이스가 있습니다. 바로 interface{}로 작성하는 빈 인터페이스입니다.

빈 interface에는 메서드 요구 사항이 전혀 없으므로 Go의 모든 type이 자동으로 이를 충족합니다. 모든 type은 최소한 0개의 메서드를 구현하므로 모든 type을 interface{} 변수에 할당할 수 있습니다.

var anything interface{}
anything = 42        // int
anything = "hello"   // string
anything = true      // bool
anything = []int{1, 2, 3}  // slice

따라서 알 수 없거나 다양한 interface{} 타입의 데이터로 작업해야 할 때 매우 유용합니다. 구성 파일을 읽거나, 사용자 input을 처리하거나, 상황에 따라 서로 다른 데이터 타입을 반환하는 API를 사용할 때 이를 접하게 될 수 있습니다.

하지만 빈 인터페이스는 모든 type을 담을 수 있으므로, 값을 의미 있게 사용하기 전에 내부에 실제로 어떤 type이 저장되어 있는지 확인해야 하는 경우가 많습니다. 이때 type 어설션과 type 스위치(다음에 배우게 됩니다)가 interface{} 값을 안전하게 다루는 데 필수적인 도구가 됩니다.

challenge icon

챌린지

쉬움

이 challenge에서는 다양한 유형의 값을 처리할 수 있는 data processor를 만들어 empty interface를 사용하는 방법을 연습합니다. interface{} parameter를 accepts하고 다양한 data type을 처리하는 function을 만듭니다.

다음 두 가지 input을 받습니다:

  • data type을 나타내는 string (예: "int", "string", "bool" 또는 "slice")
  • 실제 value를 나타내는 string (예: "42", "hello", "true" 또는 "1,2,3")

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

  1. processData라는 function을 Create하고, interface{} parameter를 받아 value에 대한 정보를 출력합니다
  2. data type input을 based로 value string을 appropriate Go type으로 Convert합니다:
    • "int"의 경우: integer로 Convert
    • "string"의 경우: string으로 사용
    • "bool"의 경우: boolean으로 Convert
    • "slice"의 경우: 쉼표로 구분된 값을 integer의 slice로 Convert
  3. converted value를 사용하여 processData function을 Call합니다
  4. processData 내부에서 다음 format으로 value와 해당 type을 출력합니다: "Value: [value], Type: [type]"

slice input의 경우 "1,2,3"과 같은 쉼표로 구분된 string을 []int{1, 2, 3}으로 Convert해야 합니다. 이 function은 interface{}를 accepts하므로 모든 type과 함께 작동해야 하며, 이를 통해 empty interface가 모든 type의 value를 보유할 수 있음을 보여줍니다. %v%T format verb와 함께 fmt.Printf를 사용하여 각각 value와 type을 표시하세요.

직접 해보기

package main

import (
	"fmt"
)

func main() {
	// 입력 읽기
	var dataType string
	var valueStr string
	fmt.Scanln(&dataType)
	fmt.Scanln(&valueStr)
	
	// TODO: 아래에 코드를 작성하세요
	// 1. interface{}를 받는 processData 함수를 생성하세요
	// 2. dataType에 따라 valueStr을 적절한 타입으로 변환하세요
	// 3. 변환된 값으로 processData를 호출하세요
	
}
quiz icon실력 점검

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

로직 & 흐름의 모든 레슨

직접 연습해 보세요: 온라인 Go 컴파일러