🔥 Stringers

210자
3분

Go 언어에서는 다양한 인터페이스를 제공하는데요. 그중에서도 가장 널리 사용되는 인터페이스 중 하나가 바로 fmt 패키지에서 정의된 Stringer 인터페이스랍니다.

type Stringer interface {
    String() string
}
 
go

Stringer는 자신을 문자열로 표현할 수 있는 타입이에요. fmt 패키지를 비롯한 많은 패키지에서는 값을 출력할 때 이 인터페이스를 찾아 사용한답니다.

예를 들어볼까요?

package main
 
import "fmt"
 
type Person struct {
	Name string
	Age  int
}
 
func (p Person) String() string {
	return fmt.Sprintf("%v (%v years)", p.Name, p.Age)
}
 
func main() {
	a := Person{"Arthur Dent", 42}
	z := Person{"Zaphod Beeblebrox", 9001}
	fmt.Println(a, z)
}
 
go

위 코드에서는 Person 구조체를 정의하고 있어요.

  • Person 구조체는 NameAge 필드를 가지고 있죠.

그리고 Person 구조체에 대해 String() 메서드를 구현하고 있습니다.

  • String() 메서드는 Stringer 인터페이스에서 정의된 메서드예요.
  • 이 메서드는 PersonNameAge를 특정 포맷으로 조합해 문자열을 반환하도록 구현되어 있네요.

main() 함수에서는 두 개의 Person 인스턴스 az를 생성합니다.

  • a는 이름이 "Arthur Dent"이고 나이가 42살이에요.
  • z는 이름이 "Zaphod Beeblebrox"이고 나이가 9001살이죠.

마지막으로 fmt.Println(a, z)를 호출하면, azStringer 인터페이스를 구현하고 있기 때문에 String() 메서드가 호출되어 다음과 같이 출력될 거예요.

Arthur Dent (42 years) Zaphod Beeblebrox (9001 years)
text

이렇게 Stringer 인터페이스를 구현함으로써 사용자 정의 타입을 보다 읽기 좋은 형태로 출력할 수 있게 됩니다. 디버깅이나 로깅 시에 매우 유용하게 활용할 수 있겠죠?