[go] 인터페이스 데이터 타입

Go 언어에서는 인터페이스 데이터 타입은 다양한 데이터 타입을 담을 수 있는 유연한 방법을 제공합니다. 인터페이스는 특정 메서드 집합을 구현하는 값을 나타내며, 해당 메서드들을 정적으로 호출할 수 있는 기능을 제공합니다.

인터페이스 정의하기

인터페이스는 특정 메서드 집합을 구현하는 값을 나타냅니다. 예를 들어, 다음과 같은 방식으로 인터페이스를 정의할 수 있습니다:

type Shape interface {
    Area() float64
    Perimeter() float64
}

위 코드에서 Shape 인터페이스는 AreaPerimeter 메서드를 구현하는 값을 나타냅니다.

인터페이스 사용하기

인터페이스를 사용하여 다른 데이터 타입들을 구조체와 연결할 수 있습니다. 예를 들어, 다음과 같이 CircleRectangle 구조체에 Shape 인터페이스를 구현할 수 있습니다:

type Circle struct {
    Radius float64
}

func (c Circle) Area() float64 {
    return math.Pi * c.Radius * c.Radius
}

func (c Circle) Perimeter() float64 {
    return 2 * math.Pi * c.Radius
}

type Rectangle struct {
    Width  float64
    Height float64
}

func (r Rectangle) Area() float64 {
    return r.Width * r.Height
}

func (r Rectangle) Perimeter() float64 {
    return 2 * (r.Width + r.Height)
}

위 코드에서 CircleRectangle 구조체는 각각 Shape 인터페이스를 구현하는 방식으로 AreaPerimeter 메서드를 구현합니다.

인터페이스 활용하기

이제 다음과 같이 인터페이스를 사용하여 다양한 데이터 타입들을 처리할 수 있습니다:

func PrintShapeInfo(s Shape) {
    fmt.Println("Area:", s.Area())
    fmt.Println("Perimeter:", s.Perimeter())
}

PrintShapeInfo 함수는 Shape 인터페이스를 구현하는 어떤 값이든지 받아들일 수 있으며, 인터페이스의 다형성을 활용하여 다양한 데이터 타입을 처리할 수 있습니다.

인터페이스를 적절히 활용하면 코드를 보다 유연하게 구성할 수 있으며, 다형성을 통해 코드의 재사용 및 확장이 용이해집니다.

결론

Go 언어의 인터페이스 데이터 타입은 다양한 데이터 타입을 유연하게 다룰 수 있는 강력한 기능을 제공합니다. 이를 활용하여 코드를 유연하게 구성하고, 다형성을 활용하여 코드의 유지보수성을 향상시킬 수 있습니다.

참고: https://tour.golang.org/methods/9