PHpullh
학습 라이브러리/Go/옵션 패턴 (구조체 방식)

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 )를 사용하세요.

Continue Learning

Go 학습을 이어가세요

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