Go lang 실습
golang 클로저, 생성자
컴닥
2021. 8. 14. 22:13
반응형
클로저의 일반적인 형태
package main
import "fmt"
func test() func(int) int {
a := 0
addOne := func(x int) int {
a += x
return a
}
return addOne
}
func main() {
t := test()
fmt.Println(t(1)) // 1
fmt.Println(t(1)) // 2
fmt.Println(t(2)) // 4
}
test 함수 안의 a와 addOne를 묶어서 클로저라고 한다.
addOne 함수 밖에 있는 변수 a를 함수 내에서 사용했다.
이런 함수와 변수 세트를 클로저 라고 한다. (closure: 닫힘)
재미있게도 a가 사라지지 않고 계속 기억된 상태이다.
이를 이용해서 생성자를 만들 수 있다.
package main
import "fmt"
func test(a int) func(int) int {
addOne := func(x int) int {
a += x
return a
}
return addOne
}
func main() {
t1 := test(0)
t2 := test(3)
fmt.Println(t1(1)) // 1
fmt.Println(t2(1)) // 4
fmt.Println(t1(2)) // 3
fmt.Println(t2(2)) // 6
}
t1은 0에서 t2는 3에서 시작했다...
반응형