구조체(struct)는 Go 언어에서 데이터를 묶은 타입을 정의할 때 사용하는 기능입니다. 이 구조체 내에서 인터페이스(interface)를 사용하면 다양한 타입의 객체를 대상으로 일관된 방식으로 작업할 수 있습니다. 이번 블로그 포스트에서는 구조체 내에서 인터페이스를 어떻게 사용하는지 알아보겠습니다.
인터페이스 개요
인터페이스는 Go 언어의 중요한 개념 중 하나로, 메소드 집합을 정의하는 역할을 합니다. 인터페이스는 특정한 메소드를 가져야 하는 타입을 정의하며, 해당 타입의 인스턴스에서 이 메소드들을 구현하면 인터페이스를 구현한 것으로 간주됩니다. 이를 통해 다형성을 구현하고, 코드의 재사용성과 유연성을 높일 수 있습니다.
구조체 내에서 인터페이스 사용하기
아래는 구조체 내에서 인터페이스를 사용하는 간단한 예제입니다.
package main
import (
"fmt"
)
type Shape interface {
Area() float64
}
type Circle struct {
Radius float64
}
func (c Circle) Area() float64 {
return 3.14 * c.Radius * c.Radius
}
type Rectangle struct {
Width float64
Height float64
}
func (r Rectangle) Area() float64 {
return r.Width * r.Height
}
func main() {
circle := Circle{Radius: 5.0}
rectangle := Rectangle{Width: 3.0, Height: 4.0}
shapes := []Shape{circle, rectangle}
for _, shape := range shapes {
fmt.Println(shape.Area())
}
}
위의 예제에서 Shape 인터페이스를 정의하고, Circle과 Rectangle이 이 인터페이스를 구현하도록 했습니다. Circle과 Rectangle은 각각 Area() 메소드를 구현하고 있습니다. main 함수에서는 Shape 타입의 슬라이스를 만들고, Circle과 Rectangle 객체를 추가한 후에 슬라이스의 요소들을 순회하며 각 객체의 Area() 메소드를 호출합니다.
결과적으로 원의 면적과 사각형의 면적이 출력되는 것을 확인할 수 있습니다.
결론
Go 언어에서는 구조체 내에서 인터페이스를 사용하여 다형성을 구현할 수 있습니다. 이를 통해 코드의 유연성과 재사용성을 높일 수 있으며, 객체 지향 프로그래밍에서 일반적으로 사용되는 개념입니다. 구조체 내에서 인터페이스를 사용하여 다양한 타입을 처리하는 유연한 코드를 작성해보세요.
참고 자료
- Effective Go - Interfaces
- The Go Programming Language Specification - Interfaces
- A Tour of Go - Interfaces