[go] 구조체(struct)의 메서드(interface)를 구현하는 방법

GO 언어는 간단하고 강력한 구조체 메서드 구현을 제공합니다. 이를 통해 구조체에 속한 동작을 캡슐화하고 코드의 재사용성과 가독성을 높일 수 있습니다. 이번 블로그 포스트에서는 GO 언어에서 구조체의 메서드를 구현하는 방법에 대해 알아보겠습니다.

1. 구조체 선언하기

먼저 구조체를 선언해야 합니다. 구조체는 데이터 필드를 유지하는 데 사용되며, 이러한 데이터 필드에는 메서드를 적용할 수 있습니다. 아래는 예시로 “Person”이라는 구조체를 선언하는 코드입니다.

type Person struct {
    name string
    age  int
}

2. 메서드 정의하기

구조체의 메서드는 특별한 수신자(receiver) 매개변수를 가지는 함수로 정의됩니다. 이 때 수신자는 메서드가 호출되는 인스턴스를 가리키며, 메서드 내에서 구조체의 필드에 액세스할 수 있습니다. 아래는 “Person” 구조체에 “PrintDetails”라는 메서드를 정의하는 예시입니다.

func (p Person) PrintDetails() {
    fmt.Printf("Name: %s, Age: %d", p.name, p.age)
}

3. 메서드 호출하기

메서드는 해당 구조체의 인스턴스에서 호출됩니다. 아래는 “Person” 구조체의 인스턴스를 생성하고 “PrintDetails” 메서드를 호출하는 예시입니다.

func main() {
    person := Person{name: "John", age: 30}
    person.PrintDetails()
}

위의 예시를 실행하면 다음과 같은 결과가 출력됩니다.

Name: John, Age: 30

만약 “Person” 구조체의 필드 값을 변경하고 싶다면 메서드 내에서 수신자를 포인터로 정의해야 합니다. 이렇게 하면 메서드가 구조체의 필드를 직접 변경할 수 있습니다.

func (p *Person) UpdateAge(newAge int) {
    p.age = newAge
}

4. 인터페이스 구현하기

GO 언어에서는 인터페이스를 사용하여 구조체가 특정한 동작을 수행할 수 있도록 정의할 수 있습니다. 인터페이스는 메서드의 집합으로 구성되며, 구조체는 인터페이스를 구현함으로써 해당 동작을 보장합니다.

아래는 “Animal” 인터페이스를 정의하고, “Dog”라는 구조체가 해당 인터페이스를 구현하는 예시입니다.

type Animal interface {
    Speak() string
}

type Dog struct {
    breed string
}

func (d Dog) Speak() string {
    return "Woof!"
}

위의 예시에서 “Dog” 구조체는 “Speak” 메서드를 구현하여 “Animal” 인터페이스를 만족합니다.

결론

GO 언어에서 구조체 메서드를 구현하는 것은 간단하고 유연한 방법입니다. 이를 통해 코드의 가독성과 유지보수성을 향상시킬 수 있습니다. 구조체의 메서드를 사용하여 객체 지향적인 접근 방식을 사용하면 컴파일 시간 오류를 방지하고 코드 작성과 디버깅을 용이하게 할 수 있습니다.

참고 자료