[go] Go 언어에서 익명 함수

Go 언어는 함수를 일급 객체로 취급하여 익명 함수(anonymous function)를 지원합니다. 익명 함수는 이름이 없는 함수로, 필요한 곳에서 바로 정의하고 사용할 수 있습니다. 이번 글에서는 Go 언어에서 익명 함수를 사용하는 방법에 대해 알아보겠습니다.

익명 함수 정의하기

Go 언어에서 익명 함수를 정의하는 방법은 간단합니다. 함수의 이름 대신에 func 키워드와 함께 함수의 파라미터와 반환값을 정의하면 됩니다. 예를 들어, 다음과 같이 익명 함수를 정의할 수 있습니다.

func() {
    // 익명 함수의 본문
}

위의 예제에서는 파라미터가 없는 익명 함수를 정의하였습니다.

익명 함수 호출하기

익명 함수를 호출하기 위해서는 정의한 함수의 이름 대신에 함수 바로 뒤에 괄호를 사용하여 호출하면 됩니다. 예를 들어, 다음과 같이 익명 함수를 호출할 수 있습니다.

func() {
    // 익명 함수의 본문
}()

() 괄호는 함수 호출의 일부로 간주되므로 익명 함수가 호출되게 됩니다.

익명 함수의 활용

익명 함수는 다양한 상황에서 유용하게 사용될 수 있습니다. 예를 들어, 다음은 익명 함수를 사용하여 정수 값을 제곱하는 예제입니다.

package main

import "fmt"

func main() {
    square := func(n int) int {
        return n * n
    }

    fmt.Println(square(5))
}

위의 예제에서는 square라는 변수에 익명 함수를 할당하고, 이 익명 함수를 호출하여 값을 제곱한 결과를 출력하는 예제입니다.

또한, 익명 함수는 클로저(closure)로서 사용될 수 있습니다. 클로저는 함수와 해당 함수에서 참조하는 변수들로 이루어진 개체로서, 익명 함수 내에서 외부 변수를 사용하는 것을 의미합니다. 예를 들어, 다음은 익명 함수를 사용하여 카운터를 구현하는 예제입니다.

package main

import "fmt"

func main() {
    counter := func() func() int {
        count := 0

        return func() int {
            count++
            return count
        }
    }()

    fmt.Println(counter()) // 1
    fmt.Println(counter()) // 2
    fmt.Println(counter()) // 3
}

위의 예제에서는 counter라는 변수에 익명 함수를 할당하고, 이 익명 함수를 호출하여 카운터 값을 출력하는 예제입니다. count라는 외부 변수는 익명 함수 내에서 호출될 때 마다 증가하게 되어 카운팅 기능을 수행합니다.

결론

Go 언어에서 익명 함수를 사용하여 코드의 유연성과 확장성을 높일 수 있습니다. 익명 함수를 통해 필요한 로직을 바로 정의하고 사용할 수 있으며, 클로저를 활용하여 외부 변수를 활용하는 기능을 구현할 수 있습니다.