이번 글에서는 Go 언어에서 인터페이스 데이터 타입을 어떻게 정의하고 사용하는지에 대해 알아보겠습니다. 인터페이스는 다양한 데이터 타입을 다룰 수 있는 매우 유용한 방법입니다.
인터페이스 개념
인터페이스는 메서드 집합으로 정의됩니다. Go에서는 인터페이스를 사용하여 메서드들의 세트를 정의하고, 해당 메서드들을 구현한 객체들을 인터페이스로 다룰 수 있게 됩니다. 이는 매우 유연한 코드를 작성할 수 있도록 해줍니다.
인터페이스 정의
인터페이스는 type
키워드를 사용하여 정의합니다. 각 메서드는 메서드 이름과 시그니처만을 정의하고, 구현은 인터페이스를 사용하는 곳에서 이루어집니다.
예를 들어, 다음은 Printer
라는 인터페이스를 정의하는 예시입니다.
type Printer interface {
Print()
}
위의 예시에서 Printer
인터페이스는 Print
메서드 하나만을 가지고 있습니다.
인터페이스 사용
이제 인터페이스를 사용하여 메서드들의 다양한 구현들을 추상화하고 관리하는 방법을 살펴봅시다.
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 printArea(s Shape) {
fmt.Println("Area:", s.Area())
}
func main() {
circle := Circle{Radius: 5}
rectangle := Rectangle{Width: 4, Height: 3}
printArea(circle)
printArea(rectangle)
}
위의 예시에서 Shape
인터페이스는 Area
메서드를 정의하고 있습니다. Circle
과 Rectangle
구조체는 각각 Area
메서드를 구현하고 있으므로, 이를 통해 각 객체의 면적을 출력하는 printArea
함수를 통해 다양한 형태의 도형을 다룰 수 있습니다.
이를 통해, 인터페이스를 사용하여 코드의 유연성을 높이고 동시에 강한 타입 체크를 보장할 수 있습니다.
마치며
Go 언어에서는 인터페이스를 사용하여 코드를 더 유연하고 모듈화할 수 있도록 해줍니다. 이를 통해 코드의 재사용성을 높이고 확장성을 갖출 수 있으며, 유지보수가 쉬운 코드를 작성할 수 있게 됩니다.
참조: Go 언어 공식 문서