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

디스커버리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 라는 느낌이랄까나?

아님 말구.


Comments

답글 남기기

이메일 주소는 공개되지 않습니다. 필수 필드는 *로 표시됩니다