1. 익명함수
- 함수명을 갖지 않는 함수
- 일반적으로 익명함수는 그 함수 전체를 변수에 할당하거나 다른 함수의 파라미터에 직접 정의되어 사용
func main() {
sum := func(n ...int) int { //익명함수 정의
s := 0
for _, i := range n {
s += i
}
return s
}
result := sum(1, 2, 3, 4, 5) //익명함수 호출
println(result)
}
- Go로 개발하면서 익명함수는 거의 사용을 안했던 것 같다.
2. 일급함수
- Go 프로그래밍 언어에서 함수는 일급함수로서 Go의 기본 타입과 동일하게 취급되며, 따라서 다른 함수의 파라미터로 전달하거나 다른 함수의 리턴값으로도 사용될 수 있다. 즉, 함수의 입력 파라미터나 리턴 파라미터로서 함수 자체가 사용될 수 있다. 함수를 다른 함수의 파라미터로 전달하기 위해서는 익명함수를 변수에 할당한 후 이 변수를 전달하는 방법과 직접 다른 함수 호출 파라미터에 함수를 적는 방법이 있다.
func main() {
//변수 add 에 익명함수 할당
add := func(i int, j int) int {
return i + j
}
// add 함수 전달
r1 := calc(add, 10, 20)
println(r1) // 30
// 직접 첫번째 파라미터에 익명함수를 정의함
r2 := calc(func(x int, y int) int { return x - y }, 10, 20)
println(r2) // -10
}
func calc(f func(int, int) int, a int, b int) int {
result := f(a, b)
return result
}
- 일급함수 뜻
함수를 다른 변수와 동일하게 다루는 언어는 일급 함수를 가졌다고 표현합니다. 예를 들어, 일급 함수를 가진 언어에서는 함수를 다른 함수에 인수로 제공하거나, 함수가 함수를 반환할 수 있으며, 변수에도 할당할 수 있습니다.
3. type문을 사용한 함수 원형 정의
- type 문은 구조체(struct), 인터페이스 등 Custom Type(혹은 User Defined Type)을 정의하기 위해 사용한다.
- type 문은 또한 함수 원형을 정의하는데 사용될 수 있다. 즉, 위 예제에서 func(x int, y int) int 함수 원형이 코드 상에 계속 반복됨을 볼 수 있는데, 이 경우 type 문을 정의함으로써 해당 함수의 원형을 간단히 표현할 수 있다.
- 함수의 원형을 정의하고 함수를 타 메서드에 전달하고 리턴받는 기능을 타 언어에서 흔히 델리게이트(Delegate)라 부른다. Go는 이러한 Delegate 기능을 제공하고 있다.
// 원형 정의
type calculator func(int, int) int
// calculator 원형 사용
func calc(f calculator, a int, b int) int {
result := f(a, b)
return result
}
- 타입스크립트의 타입과 같은 기능을 하는 것 같다.
참고 사이트
http://golang.site/go/article/10-Go-%EC%9D%B5%EB%AA%85%ED%95%A8%EC%88%98
https://developer.mozilla.org/ko/docs/Glossary/First-class_Function
'개발 > Go' 카테고리의 다른 글
[Go] 기초 - 컬렉션 (배열) (0) | 2022.07.20 |
---|---|
[Go] 기초 - 클로저 (Closure) (0) | 2022.07.19 |
[Go] 기초 - 함수 (0) | 2022.07.17 |
[Go] 기초 - 반복문 (0) | 2022.07.17 |
[Go] 기초 - 조건문 (0) | 2022.07.15 |