Go 언어 클로저 알아보기

오늘은 Go 언어에서 지원하는 클로저를 간단한 코드로 알아보려 합니다.

클로저란 함수 밖에 존재하는 변수를 접근하거나 수정하는 함수 값이라고 하며, 변수에 익명함수를 반환하면서 사용합니다.

package main

import "fmt"

우선 잘 반환되었는지 출력하여 확인하기 위해 fmt 패키지를 가져옵니다.

func insertNum() func(n int) int {
    total := 0

평범한 함수처럼 생겼지만, 반환 타입이 정수를 반환하는 함수로 지정되어 있습니다.

그리고 클로저에 쓰일 변수도 초기화해줍니다.

    return func(n int) int {
        total = total + n
        return total
    }
}

이제 익명 함수를 반환해보겠습니다.

total이라는 익명 함수의 외부 변수를 사용하는 것을 보실 수 있습니다.

func main() {
    adder := insertNum()

adder에 func(n int) int 타입이 부여됨을 확인할 수 있습니다.

    fmt.Println(adder(4))
    fmt.Println(adder(400))
}

익명 함수가 반환되면서 외부의 변수에 누적되면 최종적으로는 404가 출력됩니다.

Written on November 17, 2018