빈 인터페이스
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에서는 다양한 유형의 값을 처리할 수 있는 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는 다음과 같습니다:
processData라는 function을 Create하고,interface{}parameter를 받아 value에 대한 정보를 출력합니다- data type input을 based로 value string을 appropriate Go type으로 Convert합니다:
"int"의 경우: integer로 Convert"string"의 경우: string으로 사용"bool"의 경우: boolean으로 Convert"slice"의 경우: 쉼표로 구분된 값을 integer의 slice로 Convert
- converted value를 사용하여
processDatafunction을 Call합니다 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를 호출하세요
}이 레슨에는 짧은 퀴즈가 포함되어 있습니다. 레슨을 시작해 문제를 풀고 진행 상황을 기록하세요.
로직 & 흐름의 모든 레슨
직접 연습해 보세요: 온라인 Go 컴파일러