개발/Go

[Go] 기초 - 클로저 (Closure)

devhooney 2022. 7. 19. 20:47
728x90

1. 클로저

- Go 언어에서 함수는 Closure로서 사용될 수도 있다.

- Closure는 함수 바깥에 있는 변수를 참조하는 함수값(function value)을 말한다. 이 때 함수는 바깥의 변수를 마치 함수 안으로 끌어들인 듯이 그 변수를 읽거나 쓸 수 있게 된다.

package main
 
func nextValue() func() int {
    i := 0
    return func() int {
        i++
        return i
    }
}
 
func main() {
    next := nextValue()
 
    println(next())  // 1
    println(next())  // 2
    println(next())  // 3
 
    anotherNext := nextValue()
    println(anotherNext()) // 1 다시 시작
    println(anotherNext()) // 2
}

- nextValue() 함수는 int를 리턴하는 익명함수(func() int)를 리턴하는 함수

- Go에서 함수는 일급함수로서 다른 함수로부터 리턴되는 리턴값으로 사용될 수 있다.

- 익명함수는 그 함수 바깥에 있는 변수 i 를 참조하고 있다.

- 익명함수 자체가 로컬 변수로 i 를 갖는 것이 아니기 때문에 (만약 그렇게 되면 함수 호출시 i는 항상 0으로 설정된다) 외부 변수 i 가 상태를 계속 유지하는 즉 값을 계속 하나씩 증가시키는 기능을 하게 된다.

 

Javascript의 클로저랑 같다.

 

참고 사이트

http://golang.site/go/article/11-Go-%ED%81%B4%EB%A1%9C%EC%A0%80

 

예제로 배우는 Go 프로그래밍 - Go 클로저

클로저 (Closure) Go 언어에서 함수는 Closure로서 사용될 수도 있다. Closure는 함수 바깥에 있는 변수를 참조하는 함수값(function value)를 일컫는데, 이때의 함수는 바깥의 변수를 마치 함수 안으로 끌어

golang.site

 

728x90

'개발 > Go' 카테고리의 다른 글

[Go] 기초 - 컬렉션 (Slice)  (0) 2022.07.21
[Go] 기초 - 컬렉션 (배열)  (0) 2022.07.20
[Go] 기초 - 익명함수  (0) 2022.07.18
[Go] 기초 - 함수  (0) 2022.07.17
[Go] 기초 - 반복문  (0) 2022.07.17