-
golang 클로저, 생성자Go lang 실습 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에서 시작했다...
반응형