Go Functional Options Pattern

함수형 옵션 패턴 (Functional Options Pattern) 함수형 옵션 패턴은 함수가 선택적 인수를 허용하는 함수형 프로그래밍 에서 유래했다. 함수형 옵션 패턴을 사용하여 기존 함수 구조를 손상시키지 않고 확장할 수 있는 유여한 인터페이스를 제공한다. Go에서는 구조체를 단순화 하기 위해서 사용하며 서로 다른 매개변수를 가진 많은 생성자를 정의하는 대신 다양한 함수 옵션을 허용하여 단일 생성자를 정의할 수 있다. type ClientOptions struct { Url string Port int Method string } type Option func(*ClientOptions) error func WithUrl(url string) Option { return func(co *ClientOptions) error { co.Url = url return nil } } func WithPort(port int) Option { return func(co *ClientOptions) error { co.Port = port return nil } } func WithMethod(method string) Option { return func(co *ClientOptions) error { co.Method = method return nil } } func NewClient(opts ...Option) (*ClientOptions, error) { var co ClientOptions for _, opt := range opts { err := opt(&co) if err != nil { return nil, err } } return &co, nil } func main() { client, err := NewClient(WithUrl("http://localhost"), WithPort(8080), WithMethod("GET")) if err != nil { panic(err) } log.Println(client.Port) log.Println(client.Url) log.Println(client) } 결론 함수형 옵션 패턴은 가변적인 파라메터가 있을때 생성자 함수의 로직을 단순화 하고 유지 보수성을 높여 줄수 있다. 기존 코드의 변경 없이 옵션을 추가할 수 있으므로 재사용성이 높은 코드를 작성 할 수 있다. ...

March 1, 2024 · 1 min · 210 words · Hillfolk

Go 에서 적합한 리시버 타입의 결정 하기

Go에서 적합한 리시버 타입 결정하기 Go를 사용하다 보면 메서드 리시버로 값을 사용할지, 포인터를 사용할지 고민하는 경우가 많습니다. 최근 읽은 책에서 이에 대해 명확한 기준을 제시한 내용이 있어 공유하려 합니다. 대부분 익숙한 내용일 수 있지만, 이렇게 체계적으로 정리하니 고민을 줄이고 새로운 관점도 얻을 수 있어 유용했습니다. 리시버가 반드시 포인터여야 하는 경우 리시버의 값을 변경해야 하는 경우 가장 단순한 케이스로, 메서드에서 리시버의 값을 수정해야 할 때입니다. 예를 들어, 리시버가 슬라이스인 경우 메서드 내에서 원소를 추가하거나 수정해야 한다면 포인터 리시버가 필요합니다. ...

February 26, 2024 · 2 min · 273 words · Hillfolk

The Staff Engineers Path 에서 인상적인 내용

스테프 엔지니어의 세 기눙 스태프 엔지니어의 역할은 모호하며 가장 올바른 대답은 상황에 따라서 다르지만 이책의 필자가 생각하는 스태프엔지니어의 역할 중 가장 큰 3가지를 역할을 설명한다. 빅 픽처 관점의 사고력 넓은 시야를 가지고 세부사항 보다는 상황을 이해하고 장기적인 관점에서 회사나 팀에 필요한게 무엇인지 생각한다. 성공적인 프로젝트 실행력 프로젝트를 성공으로 이끌기 위해서 정치적 자본이나 영향력,기업문화의 변화를 이끌어 간다. 조직 차원의 레벨업 기업 또는 업계 등의 본인이 할 수 있는 범위 내에서 엔지니어의 표준과 스킬 역량을 향상시켜야할 책임이 있으며 주변 팀원들의 멘토링 역할을 수행해야 한다. ...

January 23, 2024 · 3 min · 443 words · John Doe

2023년 회고

K (잘한것) 프로젝트 모노레포를 적용한것: 기존에 3개의 분리된 레포지토리로 관리되던 프로젝트를 1개의 모노레포로 변경하였다. 통합 테스트의 효율성이나 디버깅의 편의성이 높아졋다. 좋은 시니어 엔지니어들을 채용한것: 복수의 프로젝트를 수행하면서 기존 팀원들이 인력 부족을 느끼고 있을때 좋은 엔지니어를 채용하였다. 1:1 미팅의 횟수를 늘리고 장기간 미팅을 하지 않은 인원이 없도록 한것 아직 부족하긴 하지만 팀원들과 최소 1번 또는 2번 이상의 1:1 미팅을 수행하였다. 테크리드 및 시니어분들과는 그동안 1:1 미팅을 많이 하지 않았는데 누락되는 사람이 없이 미팅을 수행하였다. ...

January 1, 2024 · 2 min · 320 words · Hillfolk

성장하는 조직 이끌기 (3A 리더쉽)

늘 결정하라. 결정은 대부분 여러 전략 사이의 트레이드오프를 정확하게 찾아내는 것 리더는 매주 무엇을 해야하는지 결정해야 하며 트레이드 오프가 명확할때도 있지만 때로는 시간이 한참 지나서야 피해를 주는 예상치 못한 결과를 가져오기도 함 리더의 역할은 나무들 사이로 숲 전체를 보면서 목표의 중요 나무까지 가는 길을 찾아 엔지니어들을 안내해주는 것 과정 먼저 눈가리개를 찾아내라 한 문제에 너무 오래 빠져있다 보면 눈가리개가 시야를 가려서 더는 숲을 보지 못하는 경우가 있다. 무언가가 눈앞을 가리고 있다는 사실 자체를 눈치 채지 못한 채 문제(혹은 해법)에 대한 가정들을 수없이 만들어낸다. 현재 방식에 문제가 있을 수 있다는 의심조차 못하고 말 그대로 비판 능력을 상실하는 경우가 있다. 이런 눈 가리개를 찾고 질문을 던질 수 있어야 하며 새로운 전략을 모색할 해야 한다. ...

March 6, 2023 · 3 min · 613 words · Hillfolk