(Go : basic) 14. closure

Posted by : at

Category : Go


package main

import "fmt"

func main() {
	//클로저(Closure)
	//익명함수 사용할 경우 함수를 변수에 할당해서 사용가능
	//이 때, 함수는 일급 객체 이므로 변수의 값으로 사용 가능
	//현재 범위에 있는 변수의 값을 캡처 후 호출 할 때 변수 사용 가능(선언 시점 기준)

	//예제1
	multiply := func(x, y int) int { //익명함수 변수 할당
		return x * y
	}

	r1 := multiply(5, 10)

	fmt.Println("ex1 : ", r1)

	//예제2
	m, n := 10, 5            //변수를 캡처
	sum := func(c int) int { //익명함수 변수 할당
		return m + n + c //지역 변수 소멸되지 않는다.(함수 호출 시 마다 사용 가능)
	}

	r2 := sum(10)

	fmt.Println("ex2 : ", r2)
}
package main

import "fmt"

func main() {

	//예제1
	cnt := increaseCnt()

	fmt.Println("ex1 : ", cnt())
	fmt.Println("ex1 : ", cnt())
	fmt.Println("ex1 : ", cnt())
	fmt.Println("ex1 : ", cnt())
	fmt.Println("ex1 : ", cnt())

}

func increaseCnt() func() int {
	n := 0 //지역변수(캡처됨)
	return func() int {
		n += 1
		return n
	}
}
$ ex1 : 1
$ ex1 : 2
$ ex1 : 3
$ ex1 : 4
$ ex1 : 5

About Taehyung Kim

안녕하세요? 8년차 현업 C++ 개발자 김태형이라고 합니다. 😁 C/C++을 사랑하며 다양한 사람과의 협업을 즐깁니다. ☕ 꾸준한 자기개발을 미덕이라 생각하며 노력중이며, 제가 얻은 지식을 홈페이지에 정리 중입니다. 좀 더 상세한 제 이력서 혹은 Private 프로젝트 접근 권한을 원하신다면 메일주세요. 😎

Star
Useful Links