closure

현재 페이지를 로딩중입니다.
만약 페이지 로딩이 끝났는데 본문이 보이지 않는다면
광고차단 플러그인 때문이니 잠시 플러그인을 꺼주시면 감사하겠습니다.

The current page is loading.
If the page loading is over but the text is not visible
This is because of the ad blocking plugin, so please be sure to turn off the plugin for a while.

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

디스커버리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.