클로저(Closure)
함수 안에서 익명 함수를 만들 수 있고, 바깥쪽 함수에서도 함수의 변수에 접근할 수 있는 함수
반복되는 함수 단어로 헷갈린다면 코드를 보자
func appendString() func(s string) string {
result := ""
return func(s string) string {
result += s
return result
}
}
func main() {
testClosure1 := appendString()
print(testClosure1("a")) //a
print(testClosure1("b")) //ab
testClosure2 := appendString()
print(testClosure2("c")) //c
print(testClosure2("d")) //cd
}
appendString() 함수에서 리턴값인 익명함수는 함수 바깥의 result 변수를 참조하고 있다.
Go 에서는 함수가 리턴값으로 사용 가능하며 클로저에서는 함수가 리턴값으로 사용된다.
클로저를 구성할 때 만든 익명 함수를 람다 함수라한다. (헷갈리지 말자!)
사용하는 이유
지역변수가 소멸되지 않고, 호출할 때마다 지속적으로 사용 가능하다
참고자료
'IT' 카테고리의 다른 글
[Docker] Docker Image 사이즈 줄이기 (2) | 2021.01.31 |
---|---|
[CloudWatch] AWS 클라우드 와치 (0) | 2020.12.28 |
[k8s] Kubernetes Controller (쿠버네티스 컨트롤러) - 01 (0) | 2020.12.15 |
[Go/Golang] Go 언어는 무엇이고 왜 쓰고 언제쓸까? (0) | 2020.11.18 |
[Spring Boot] 스프링 클라우드 (Spring Cloud) (+ RabbitMQ 연결) (0) | 2020.10.28 |