🔥 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 가이드
펑터란? | 프로그래머를 위한 카테고리 이론
NestJS 표준 예외 처리와 HttpException | NestJS 가이드
앨런 튜링이 들려주는 튜링 테스트와 보편 기계 이야기
미들웨어 적용과 라우팅 | NestJS 가이드
Product와 Coproduct가 Bifunctor인 이유 | 프로그래머를 위한 카테고리 이론
NestJS 파이프가 뭔가요? 컨트롤러를 보호하는 방법 | NestJS 가이드
List 펑터 - 왜 map은 for 루프보다 강력한가? | 프로그래머를 위한 카테고리 이론