GO · 함수
함수 옵션 패턴
Functional Options 패턴으로 유연한 설정을 제공합니다. 생성자의 매개변수가 많을 때 가독성과 확장성을 높입니다.
함수고급functional-optionsbuilderconfigurationpattern
핵심 설명
Functional Options 패턴으로 유연한 설정을 제공합니다. 생성자의 매개변수가 많을 때 가독성과 확장성을 높입니다.
Go code
package main
import "fmt"
type Server struct {
Host string
Port int
TLS bool
Timeout int
}
type Option func(*Server)
func WithPort(port int) Option {
return func(s *Server) { s.Port = port }
}
func WithTLS() Option {
return func(s *Server) { s.TLS = true }
}
func WithTimeout(sec int) Option {
return func(s *Server) { s.Timeout = sec }
}
func NewServer(host string, opts ...Option) *Server {
s := &Server{Host: host, Port: 8080, Timeout: 30}
for _, opt := range opts {
opt(s)
}
return s
}
func main() {
s := NewServer("localhost",
WithPort(9090),
WithTLS(),
WithTimeout(60),
)
fmt.Printf("%+v\n", s)
}학습 팁
함수 옵션 패턴은 기본값을 유지하면서 필요한 것만 변경할 수 있습니다. Rob Pike가 제안한 Go의 대표적 관용구입니다.
주의할 점
옵션 함수에서 유효성 검사를 하지 않으면 잘못된 설정이 통과됩니다. 옵션이 에러를 반환하는 변형(func(*Server) error)을 고려하세요.
자주 묻는 질문
함수 옵션 패턴란 무엇인가요?
Functional Options 패턴으로 유연한 설정을 제공합니다. 생성자의 매개변수가 많을 때 가독성과 확장성을 높입니다.
함수 옵션 패턴 학습 시 주의할 점은 무엇인가요?
옵션 함수에서 유효성 검사를 하지 않으면 잘못된 설정이 통과됩니다. 옵션이 에러를 반환하는 변형( func(*Server) error )을 고려하세요.