기본값과 검증
합리적인 기본값 설정하기
기본값과 검증은(는) CoddyKit의 무료 Go Academy 강의입니다. 이것은 4개 중 4번째 강의입니다. 아래에서 전체 강의를 무료로 읽을 수 있으며, 내장 코드 에디터와 24/7 AI 튜터와 함께 브라우저에서 직접 실습할 수 있습니다. 이 강의는 Go Academy 학습 경로의 일부이며, 진행 상황이 웹과 CoddyKit 앱에 동기화됩니다. Go Academy 강의에는 총 4개의 강의가 포함되어 있습니다.
합리적인 기본값 설정하기
견고한 생성자는 좋은 기본값에서 시작한 다음 옵션이 이를 재정의하도록 합니다. 이렇게 하면 0 값의 함정을 완전히 피할 수 있습니다.
적용하기 전에 초기화하기
먼저 기본값으로 구성을 만든 다음 그 위에 옵션을 적용합니다.
package main
import "fmt"
type Server struct {
Port int
Timeout int
}
type Option func(*Server)
func WithPort(p int) Option { return func(s *Server) { s.Port = p } }
func NewServer(opts ...Option) *Server {
s := &Server{Port: 8080, Timeout: 30}
for _, o := range opts { o(s) }
return s
}
func main() {
fmt.Printf("%+v\n", *NewServer())
fmt.Printf("%+v\n", *NewServer(WithPort(9000)))
}재정의되기 전까지 기본값 유지하기
옵션 없이 호출하면 기본값이 사용되고, 옵션은 자신이 다루는 필드만 바꿉니다. 두 방식의 장점을 모두 얻을 수 있습니다.
적용 후 검증하기
옵션을 적용한 후 최종 구성을 검증하고 유효하지 않으면 오류를 반환합니다. 생성자가 (*T, error)를 반환하도록 만드세요.
package main
import (
"errors"
"fmt"
)
type Server struct{ Port int }
type Option func(*Server)
func WithPort(p int) Option { return func(s *Server) { s.Port = p } }
func NewServer(opts ...Option) (*Server, error) {
s := &Server{Port: 8080}
for _, o := range opts { o(s) }
if s.Port < 1 || s.Port > 65535 {
return nil, errors.New("invalid port")
}
return s, nil
}
func main() {
_, err := NewServer(WithPort(99999))
fmt.Println(err)
}옵션 내부에서 검증하기
또 다른 방법은 옵션 자체가 오류를 반환하도록 하는 것입니다. 그러면 Option 타입이 func(*Config) error가 됩니다.
package main
import (
"errors"
"fmt"
)
type Server struct{ Port int }
type Option func(*Server) error
func WithPort(p int) Option {
return func(s *Server) error {
if p < 1 {
return errors.New("port must be positive")
}
s.Port = p
return nil
}
}
func NewServer(opts ...Option) (*Server, error) {
s := &Server{Port: 8080}
for _, o := range opts {
if err := o(s); err != nil {
return nil, err
}
}
return s, nil
}
func main() {
_, err := NewServer(WithPort(-1))
fmt.Println(err)
}어떤 검증 방식을 사용할까요
각 설정을 검사해야 한다면 옵션에서 검증하고, 필드 간 규칙은 적용 후에 검증합니다(예: TLS를 사용하려면 인증서 경로가 필요함). 두 방식을 함께 사용하는 경우가 많습니다.
기본값 문서화하기
옵션을 생략했을 때 어떤 값을 받는지 사용자가 알 수 있도록 생성자의 문서 주석에 각 기본값을 항상 기록하세요.
필수 항목과 선택 항목
정말로 필요한 값은 위치 기반 매개변수로 유지하고, 옵션은 진정으로 선택적인 값에만 사용하세요. 필수 데이터를 옵션 뒤에 숨기지 마세요.
package main
import "fmt"
type Client struct {
BaseURL string
Retries int
}
type Option func(*Client)
func WithRetries(n int) Option { return func(c *Client) { c.Retries = n } }
func NewClient(baseURL string, opts ...Option) *Client {
c := &Client{BaseURL: baseURL, Retries: 3}
for _, o := range opts { o(c) }
return c
}
func main() {
fmt.Printf("%+v\n", *NewClient("https://api"))
}옵션 결합하기
일반적인 구성을 위해 여러 옵션을 하나의 사전 설정으로 조합할 수 있습니다.
package main
import "fmt"
type Server struct{ Port, Timeout int }
type Option func(*Server)
func WithPort(p int) Option { return func(s *Server) { s.Port = p } }
func WithTimeout(t int) Option { return func(s *Server) { s.Timeout = t } }
func Production() Option {
return func(s *Server) {
WithPort(443)(s)
WithTimeout(60)(s)
}
}
func NewServer(opts ...Option) *Server {
s := &Server{Port: 8080, Timeout: 30}
for _, o := range opts { o(s) }
return s
}
func main() {
fmt.Printf("%+v\n", *NewServer(Production()))
}모범 사례
- 기본값에서 시작한 다음 옵션을 적용하기
- 필드 간 규칙은 적용 후에 검증하기
- 필수 값은 위치 기반으로 유지하기
- 모든 기본값을 문서화하기
완전하고 견고한 API
기본값, 옵션, 검증을 결합하면 유연하고 안전하며 의미가 명확하고 확장하기 쉬운 생성자를 만들 수 있습니다.
확인 문제
기본값과 검증에 대한 지식을 테스트해 보세요.
복습
함수형 옵션 패턴을 완성했습니다.
- 옵션을 적용하기 전에 기본값을 설정합니다
- 적용 후에 검증하거나 필드별 검사를 위해 옵션 내부에서 검증합니다
- 필수 값은 위치 기반으로 유지합니다
- 옵션을 사전 설정으로 조합하고 기본값을 문서화합니다
자주 묻는 질문
“기본값과 검증” 강의는 무료인가요?
네 — “기본값과 검증” 전체 내용을 이 웹사이트에서 무료로 읽을 수 있습니다. 인터랙티브하게 실습하려면(내장 코드 에디터와 24/7 AI 튜터), CoddyKit PRO로 업그레이드하면 Go Academy 강의 전체를 잠금 해제할 수 있습니다. Go Academy 강의에는 총 4개의 강의가 포함되어 있습니다.
“기본값과 검증”에서 뭘 배우나요?
합리적인 기본값 설정하기 브라우저에서 직접 실행하는 실습 코드로 Go Academy을(를) 배우며, 24/7 AI 튜터가 강의를 진행하면서 질문에 답변해줍니다.
Go Academy을(를) 시작하는 데 경험이 필요한가요?
사전 경험은 필요하지 않습니다. CoddyKit의 Go Academy은(는) 초급자부터 고급 학습자까지를 위해 구성되어 있으므로, 여기서 시작하거나 처음부터 시작할 수 있으며 자신의 속도대로 진행할 수 있습니다. 이것은 4개 중 4번째 강의입니다.
“기본값과 검증” 강의는 얼마나 걸리나요?
대부분의 CoddyKit 강의는 약 5~10분이 소요됩니다. 각 강의는 간결하고 인터랙티브하여 꾸준한 진행이 가능하며, 웹과 앱에서 중단한 부분부터 바로 시작할 수 있습니다.
이 Go Academy 강의에서 코드를 작성하고 실행할 수 있나요?
네. 모든 Go Academy 강의에는 내장 코드 에디터가 포함되어 있으므로, 브라우저에서 바로 실제 코드를 작성하고 실행한 후 즉시 AI 피드백을 받을 수 있습니다 — 로컬 설정이 필요 없습니다.