하이어오더펑션과 함수리터럴과 클로저 다 묶음이라고 생각해야 하나
디스커버리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 라는 느낌이랄까나?
아님 말구.
답글 남기기