🔥 Stringers

210자
3분

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

go
type Stringer interface {
    String() string
}
 
go
type Stringer interface {
    String() string
}
 

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

예를 들어볼까요?

go
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
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)
}
 

위 코드에서는 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() 메서드가 호출되어 다음과 같이 출력될 거예요.

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

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

YouTube 영상

채널 보기
미들웨어 적용과 라우팅 | NestJS 가이드
펑터란? | 프로그래머를 위한 카테고리 이론
펑터 법칙과 등식 추론 | 프로그래머를 위한 카테고리 이론
동적 모듈 이해하기 | NestJS 가이드
@Global() 데코레이터와 전역 모듈 | NestJS 가이드
생성자 지옥에서 벗어나는 DI 방법 | NestJS 가이드
모듈과 프로바이더 | NestJS 가이드
함수형 미들웨어 | NestJS 가이드