🔥 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 영상

채널 보기
밑바닥부터 배우는 컴퓨터 구조 - 트랜지스터에서 CPU까지
숫자 하나가 AI 모델의 운명을 바꾼다? | 선형대수학
AI를 위한 선형대수 - 전단, 행렬식, 변환의 핵심
5편, B-Tree 내부 노드에서 키를 삭제할 때 정렬 규칙을 지키는 방법
11편, 왜 DB마다 성능이 다를까? 엔진별 B-Tree 저장 방식 비교
AI를 위한 선형대수, 데이터는 점구름이다
AI에서 고차원 임베딩이 무엇일까?
AI에서 선형대수가 중요한 이유