PHpullh
학습 라이브러리/Go/함수 옵션 패턴

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 )을 고려하세요.

Continue Learning

Go 학습을 이어가세요

총 200개의 독립 HTML 학습 문서 중 하나입니다. 각 문서는 고유 URL과 canonical 메타데이터를 가집니다.