[go] 구조체(struct)의 메서드 체이닝(Method Chaining) 사용법

Go 언어에서 구조체(struct)의 메서드 체이닝(Method Chaining)을 사용하여 코드를 더욱 간결하고 가독성 있게 작성할 수 있습니다. 메서드 체이닝은 한 줄에 여러 개의 메서드를 순차적으로 호출할 수 있게 해주는 기능입니다.

메서드 체이닝 예제

다음은 메서드 체이닝을 사용하여 구조체의 메서드를 연속적으로 호출하는 예제입니다.

package main

import "fmt"

type Person struct {
    name    string
    age     int
    address string
}

func (p *Person) SetName(name string) *Person {
    p.name = name
    return p
}

func (p *Person) SetAge(age int) *Person {
    p.age = age
    return p
}

func (p *Person) SetAddress(address string) *Person {
    p.address = address
    return p
}

func main() {
    person := &Person{}
    person.SetName("John").SetAge(30).SetAddress("123 Main St")

    fmt.Println(person.name)    // John
    fmt.Println(person.age)     // 30
    fmt.Println(person.address) // 123 Main St
}

위 예제에서는 Person 구조체에 SetName, SetAge, SetAddress 메서드가 있습니다. 각 메서드는 자신의 구조체 포인터를 반환하여 메서드 체이닝을 가능하게 합니다.

main 함수에서는 Person 구조체를 생성한 후에 SetName, SetAge, SetAddress 메서드를 메서드 체이닝으로 호출하여 각 필드의 값을 설정합니다.

마지막으로, person 구조체의 필드값을 출력하면 설정한 값들이 올바르게 출력됩니다.

주의사항

메서드 체이닝을 사용할 때 주의해야 할 사항이 있습니다. 만약 메서드 체이닝으로 호출한 메서드 중 하나가 포인터를 반환하지 않는다면 다음 메서드를 호출할 수 없습니다.

위 예제에서 SetName, SetAge, SetAddress 메서드가 모두 포인터를 반환했기 때문에 메서드 체이닝이 가능한 것입니다. 만약 이러한 메서드 중 하나라도 포인터를 반환하지 않으면 다음과 같은 오류가 발생합니다.

cannot call pointer method on person.SetName("John") (value of type Person)

따라서, 메서드 체이닝을 사용하려면 메서드들이 모두 포인터를 반환하도록 구현해야 합니다.

결론

Go 언어의 구조체(struct)의 메서드 체이닝(Method Chaining)은 코드를 간결하고 가독성 있게 작성하는데 도움을 줍니다. 메서드 체이닝을 사용하여 여러 개의 메서드를 한 줄에 순차적으로 호출할 수 있게 되므로, 코드 작성과 유지보수가 용이해집니다.

더 많은 정보를 알고 싶다면 Go 언어의 공식 문서를 참조하세요.