ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 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에서 시작했다... 

    반응형
Designed by Tistory.