GO · 구조체/인터페이스
옵션 패턴 (구조체 방식)
설정 구조체 + 기본값 패턴으로 함수 옵션을 관리합니다. Functional Options 대비 구조가 명확합니다.
구조체/인터페이스고급optionsconfigdefaultsstruct
핵심 설명
설정 구조체 + 기본값 패턴으로 함수 옵션을 관리합니다. Functional Options 대비 구조가 명확합니다.
Go code
package main
import "fmt"
type ClientConfig struct {
BaseURL string
Timeout int
RetryCount int
Verbose bool
}
// 기본값을 제공하는 생성자
func DefaultConfig() ClientConfig {
return ClientConfig{
BaseURL: "https://api.example.com",
Timeout: 30,
RetryCount: 3,
Verbose: false,
}
}
type Client struct {
config ClientConfig
}
func NewClient(cfg ClientConfig) *Client {
// 누락된 값에 기본값 적용
if cfg.BaseURL == "" {
cfg.BaseURL = DefaultConfig().BaseURL
}
if cfg.Timeout <= 0 {
cfg.Timeout = DefaultConfig().Timeout
}
return &Client{config: cfg}
}
func main() {
// 기본값 + 일부 커스터마이징
cfg := DefaultConfig()
cfg.Timeout = 60
cfg.Verbose = true
c := NewClient(cfg)
fmt.Printf("URL: %s, Timeout: %d\n", c.config.BaseURL, c.config.Timeout)
}학습 팁
설정 구조체 방식은 IDE 자동완성이 잘 지원되고, 설정 필드가 한눈에 보입니다. 필드가 5개 이하일 때 적합합니다.
주의할 점
구조체의 제로 값(0, "")이 유효한 설정값인 경우 기본값과 구분할 수 없습니다. 이때는 포인터 필드(*int)를 사용하세요.
자주 묻는 질문
옵션 패턴 (구조체 방식)란 무엇인가요?
설정 구조체 + 기본값 패턴으로 함수 옵션을 관리합니다. Functional Options 대비 구조가 명확합니다.
옵션 패턴 (구조체 방식) 학습 시 주의할 점은 무엇인가요?
구조체의 제로 값(0, "")이 유효한 설정값인 경우 기본값과 구분할 수 없습니다. 이때는 포인터 필드( *int )를 사용하세요.