[Go 공식문서 한국어 정리] ⑤5. Codewalk: Go의 일급 함수
Codewalk: Go의 일급 함수
https://go.dev/doc/codewalk/functions
Go는 일급 함수(first-class functions), 고차 함수(higher-order functions), 사용자 정의 함수 타입, 함수 리터럴, 클로저, 다중 반환값을 지원합니다. 이 풍부한 기능 세트는 강력한 타입 시스템에서 함수형 프로그래밍 스타일을 가능하게 합니다.
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
① 서론
이 Codewalk에서는 Pig라는 주사위 게임을 시뮬레이션하고 기본 전략을 평가하는 프로그램을 통해 Go의 함수 관련 기능들을 살펴 봅니다.
② 핵심 개념
1. 일급 함수: 함수는 다른 값처럼 변수에 할당되고 인자로 전달될 수 있습니다.
2. 사용자 정의 함수 타입: 함수 시그니처를 타입으로 정의할 수 있습니다.
3. 다중 반환값: 함수가 여러 값을 반환할 수 있습니다.
4. 고차 함수: 함수를 인자로 받거나 함수를 반환할 수 있습니다.
5. 클로저: 함수 리터럴은 선언된 스코프의 변수를 캡처합니다.
③ 주요 내용 상세
사용자 정의 함수 타입
type action func(score) (score, bool)
- action은 score를 받아 새 score와 턴 종료 여부를 반환하는 함수 타입입니다.
- roll과 stay 함수는 action 타입 시그니처와 일치합니다.
고차 함수
type strategy func(score) action
- strategy는 score를 받아 action(함수)을 반환하는 고차 함수입니다.
- 이를 통해 게임 규칙과 플레이어 전략을 분리합니다.
함수 리터럴과 클로저
func stayAtK(k int) strategy {
return func(s score) action {
if s.thisTurn >= k {
return stay
}
return roll
}
}
- stayAtK는 k 값을 캡처하는 클로저를 반환합니다.
- 각 k 값마다 다른 전략 함수가 생성됩니다.
가변 인자 함수
func ratioString(vals ...float64) string
- ...float64로 가변 인자를 받습니다.
- 함수 낭부에서는 []float64 슬라이스로 접근합니다.
시뮬레이션 결과
100가지 기본 전략(k점에서 stay)으로 라운드 로빈 토너먼트를 시뮬레이션했습니다.
25점에서 stay하는 전략이 가장 좋은 성과를 보였습니다.
④ 실전 활용
- 콜백 함수를 정의할 때 사용자 정의 함수 타입을 사용하세요.
- 의존성 주입이나 미들웨어 패턴에 고차 함수를 활용하세요.
- 설정 값을 캡처하는 팩토리 함수에 클로저를 사용하세요.
- 에러 처리와 함께 다중 반환값을 적극 활용하세요.
- 함수형 옵션 패턴(functional options)에 이런 개념들을 조합하세요.
⑤ 정리
Go의 함수는 일급 시민입니다. 함수 타입 정의, 고차 함수, 클로저를 활용하면 유연하고 재사용 가능한 코드를 작성할 수 있습니다. Pig 게임 예제는 단순하지만 함수형 프로그래밍의 핵심 개념들을 명확히 보여줍니다.
#Go #Golang #FirstClassFunction #일급함수 #HigherOrderFunction #Closure #클로저 #Codewalk #공식문서

오뉴노노 님의 최근 댓글
ㅋㅋㅋㅋㅋ 2019 01.14 잘 읽었습니다 2018 12.30 포인트가 없어서 아직 시작을 못하고있는데요! 글은 잘 읽었습니다! 포인트 쌓고 도전할거에요 2018 12.30