개발/Go

[Go] 기초 - 익명함수

devhooney 2022. 7. 18. 21:21
728x90

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

 

예제로 배우는 Go 프로그래밍 - Go 익명함수

1. 익명함수 함수명을 갖지 않는 함수를 익명함수(Anonymous Function)이라 부른다. 일반적으로 익명함수는 그 함수 전체를 변수에 할당하거나 다른 함수의 파라미터에 직접 정의되어 사용되곤 한다.

golang.site

https://developer.mozilla.org/ko/docs/Glossary/First-class_Function

 

일급 함수 - 용어 사전 | MDN

함수를 다른 변수와 동일하게 다루는 언어는 일급 함수를 가졌다고 표현합니다. 예를 들어, 일급 함수를 가진 언어에서는 함수를 다른 함수에 인수로 제공하거나, 함수가 함수를 반환할 수 있으

developer.mozilla.org

 

728x90

'개발 > 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