closure

Doongsil·2024년 4월 29일

외부 변수를 참조하는 함수

클로저라는 개념이 어떤 건지는 알겠는데
정확히 어떤 의미로 사용되는지 애매해서 정리해놓는다


익명 함수를 반환하는 함수에서 많이 볼 수 있으며
이렇게 되면 구조체와 같이 상태(변수)를 가지는 함수가 된다

// e.g. timeout 를 참조하고 있는 함수(클로저)를 반환
func WithTimeout(timeout time.Duration) ServerOption {
  return func(s *http.Server) {
    s.ReadTimeout = timeout
    s.WriteTimeout = timeout
  }
}

일반적으로 함수가 반환되면
함수 내 변수들은 메모리에서 해제될텐데 (스택 영역에 할당 후 해제)
클로저가 참조하고 있는 변수는 해제되지 않고 들고 있게 된다


이 때, 클로저가 참조하는 변수가
스택 영역에 있다가 힙 영역으로 이동되는지
처음부터 힙 영역에 할당되는지는
컴파일러의 이스케이프 분석에 따라 달라진다고 한다

profile
두둥실

0개의 댓글