[go] 구조체(struct) 내에서 인터페이스(interface)를 사용하는 방법

구조체(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 언어에서는 구조체 내에서 인터페이스를 사용하여 다형성을 구현할 수 있습니다. 이를 통해 코드의 유연성과 재사용성을 높일 수 있으며, 객체 지향 프로그래밍에서 일반적으로 사용되는 개념입니다. 구조체 내에서 인터페이스를 사용하여 다양한 타입을 처리하는 유연한 코드를 작성해보세요.

참고 자료