옵션 패턴을 활용한 Go의 고급 파라미터 처리
카테고리
프로그래밍/소프트웨어 개발
서브카테고리
웹 개발
대상자
Go 개발자, 복잡한 객체 구성이 필요한 프로젝트 참여자
난이도: 중간 (Go의 클로저와 인터페이스 개념 이해 필요)
핵심 요약
- 옵션 패턴은
func(*Server)
형식의 Option 함수를 통해 파라미터를 유연하게 구성할 수 있음 - With 접두사 기반의 명확한 명명 규칙과 파라미터 검증을 통해 안정성 확보
- 장점: 가독성 향상, 확장성, 동적 구성 지원
- 적용 시나리오: 3개 이상의 파라미터, 디폴트 값 필요, 상호 의존성 있는 파라미터
섹션별 세부 요약
1. 전통적 방식의 한계
- 파라미터 순서 민감, 디폴트 값 설정 불가
- 파라미터 추가 시 모든 호출자 수정 필요
- 0 값의 유효성 판단 어려움
2. 옵션 패턴 구현 방식
Option
인터페이스 정의:type Option func(*Server)
WithTimeout
,WithMaxConn
등 Option 함수로 구성NewServer
생성자에서...Option
변형 파라미터로 조합
3. 코드 예시
func WithPort(port int) Option {
return func(s *Server) {
if port < 0 || port > 65535 {
panic("invalid port number")
}
s.port = port
}
}
WithPort
함수는 유효성 검증 후Server
구조체에 값을 설정
4. 최적화 팁
- 고성능 시나리오:
var HighPerfOption = WithMaxConn(1000)
과 같이 Option 객체 재사용 - 그룹화 구성:
WithNetworkOptions
로 프로토콜 및 타임아웃 동시 설정
5. 패턴 비교
| 패턴 | 장점 | 단점 |
|------------|--------------------------|--------------------------|
| 옵션 패턴 | 유연성, 가독성, 확장성 | 클로저로 인한 약간의 성능 오버헤드 |
| 빌더 패턴 | 단계별 구성을 지원 | Builder 클래스 유지 필요 |
| 함수 파라미터 | 간단한 구현 가능 | 확장성 부족 |
결론
- 옵션 패턴은 복잡한 객체 생성 시 유연성과 안정성을 동시에 제공함
- 공용 라이브러리 또는 복잡한 구성 시 강력히 추천
- DSL(Domain-Specific Language) 생성을 위해 인터페이스와 타입 별칭 조합 활용 가능