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에서 시작했다... 

반응형