closure

하이어오더펑션과 함수리터럴과 클로저 다 묶음이라고 생각해야 하나

디스커버리Go 책 4.2.3에 나오는 내용인데
클로저는 외부에서 선언한 변수를 함수 리터럴 내에서 마음대로 접근할 수 있는 코드를 의미한다고 함.

함수 리터럴 쓰이는곳과 왜 이걸 쓰면 좋은지 아직 판단이 안되서
사실 되는건 봤는데 이걸 당최 어디다 써먹으면 좋은건지 모르겠다.

func closureF(f func(cnt int, text int)) error {
	b := 100
	for a := 0; a < 3; a++ {
		b++
		f(a, b)
	}
	return nil
}

func Example_closure() {

	//변수 내용물 확인
	var tmpBuf [3]int
	for cnt := 0; cnt < 3; cnt++ {
		fmt.Printf("tmpBuf[%d]= %d\n", cnt, tmpBuf[cnt])
	}
	fmt.Println("====================================")

	//사용1
	closureF(func(cnt int, text int) {
		fmt.Println(cnt)
		tmpBuf[cnt] = text
	})

	//사용2
	closureFunc := func(cnt int, text int) {
		fmt.Println(cnt)
		tmpBuf[cnt] = text
	}
	closureF(closureFunc)

	fmt.Println("====================================")
	for cnt := 0; cnt < 3; cnt++ {
		fmt.Printf("tmpBuf[%d]= %d\n", cnt, tmpBuf[cnt])
	}

	//Output:
}

그냥 느낌으로는 tmpBuf가 실제 사용은 closureF에서 사용하지만 함수 리터럴은 tmpBuf 밑에서 사용되니
같은 함수{} 안에 묶여 있으니 OK 라는 느낌이랄까나?

아님 말구.

크리에이티브 커먼즈 라이선스 Linsoo의 저작물인 이 저작물은(는)크리에이티브 커먼즈 저작자표시-동일조건변경허락 4.0 국제 라이선스에 따라 이용할 수 있습니다.

댓글 남기기

이메일은 공개되지 않습니다.

This site uses Akismet to reduce spam. Learn how your comment data is processed.