본문 바로가기

IT

[Go/Golang] 클로저(Closure)

클로저(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 에서는 함수가 리턴값으로 사용 가능하며 클로저에서는 함수가 리턴값으로 사용된다.

클로저를 구성할 때 만든 익명 함수람다 함수라한다. (헷갈리지 말자!)

 

사용하는 이유

지역변수가 소멸되지 않고, 호출할 때마다 지속적으로 사용 가능하다

 

참고자료

gobyexample.com/closures

pyrasis.com/book/GoForTheReallyImpatient/Unit25