[go] 인터페이스 데이터 타입 기본 사용법

이번 글에서는 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 메서드를 정의하고 있습니다. CircleRectangle 구조체는 각각 Area 메서드를 구현하고 있으므로, 이를 통해 각 객체의 면적을 출력하는 printArea 함수를 통해 다양한 형태의 도형을 다룰 수 있습니다.

이를 통해, 인터페이스를 사용하여 코드의 유연성을 높이고 동시에 강한 타입 체크를 보장할 수 있습니다.

마치며

Go 언어에서는 인터페이스를 사용하여 코드를 더 유연하고 모듈화할 수 있도록 해줍니다. 이를 통해 코드의 재사용성을 높이고 확장성을 갖출 수 있으며, 유지보수가 쉬운 코드를 작성할 수 있게 됩니다.

참조: Go 언어 공식 문서