🔥 빈 인터페이스 (Empty Interface)
298자
4분
Go 언어에서는 메서드를 하나도 지정하지 않은 인터페이스를 **빈 인터페이스(Empty Interface)**라고 부릅니다.
interface{}
go
빈 인터페이스는 어떤 타입의 값도 담을 수 있습니다. 왜냐하면 모든 타입은 적어도 0개 이상의 메서드를 구현하기 때문이죠.
빈 인터페이스는 타입을 알 수 없는 값을 다루는 코드에서 사용됩니다. 예를 들어, fmt.Print
함수는 interface{}
타입의 인수를 여러 개 받습니다.
다음은 빈 인터페이스를 사용하는 예제 코드입니다.
package main import "fmt" func main() { var i interface{} describe(i) i = 42 describe(i) i = "hello" describe(i) } func describe(i interface{}) { fmt.Printf("(%v, %T)\n", i, i) }
go
코드를 하나씩 살펴보겠습니다.
var i interface{}
go
i
라는 변수를interface{}
타입으로 선언합니다.- 이렇게 하면
i
는 어떤 타입의 값도 저장할 수 있게 됩니다.
describe(i)
go
i
변수를describe
함수에 전달합니다.- 이 때
i
는 아직 아무 값도 할당되지 않은 상태입니다.
i = 42 describe(i)
go
i
에 정수 42를 할당합니다.- 다시
describe
함수를 호출하여i
의 값과 타입을 출력합니다.
i = "hello" describe(i)
go
- 이번에는
i
에 문자열 "hello"를 할당합니다. describe
함수를 호출하여i
의 값과 타입을 출력합니다.
func describe(i interface{}) { fmt.Printf("(%v, %T)\n", i, i) }
go
describe
함수는interface{}
타입의 인수i
를 받습니다.fmt.Printf
를 사용하여i
의 값과 타입을 출력합니다.%v
는 값을 기본 형식으로 출력합니다.%T
는 타입을 출력합니다.
프로그램을 실행하면 다음과 같은 출력 결과를 얻을 수 있습니다.
(<nil>, <nil>) (42, int) (hello, string)
text
- 첫 번째 출력은
i
가 아무 값도 할당되지 않은 상태이므로<nil>
이 출력됩니다. - 두 번째 출력은
i
에 정수 42가 할당되었으므로 값은 42, 타입은int
로 출력됩니다. - 세 번째 출력은
i
에 문자열 "hello"가 할당되었으므로 값은 "hello", 타입은string
으로 출력됩니다.
이처럼 빈 인터페이스를 사용하면 함수가 다양한 타입의 값을 받을 수 있게 됩니다. 이는 Go 언어에서 매우 유용한 기능 중 하나입니다. 타입에 구애받지 않고 값을 전달할 수 있어 코드의 유연성과 재사용성을 높일 수 있습니다.