PHpullh
학습 라이브러리/Go/클로저 패턴

GO · 함수

클로저 패턴

클로저는 외부 변수를 캡처하는 함수입니다. 상태를 유지하는 카운터, 팩토리, 메모이제이션 등에 활용됩니다.

함수중급closurefactorymemoizecapture

핵심 설명

클로저는 외부 변수를 캡처하는 함수입니다. 상태를 유지하는 카운터, 팩토리, 메모이제이션 등에 활용됩니다.

Go code

package main

import "fmt"

// 카운터 팩토리
func counter(start int) func() int {
	n := start
	return func() int {
		n++
		return n
	}
}

// 메모이제이션
func memoize(fn func(int) int) func(int) int {
	cache := map[int]int{}
	return func(n int) int {
		if v, ok := cache[n]; ok {
			return v
		}
		cache[n] = fn(n)
		return cache[n]
	}
}

func main() {
	next := counter(0)
	fmt.Println(next(), next(), next()) // 1 2 3

	fib := memoize(func(n int) int {
		if n <= 1 { return n }
		return n * (n - 1) // 단순 예시
	})
	fmt.Println(fib(10)) // 90
}

학습 팁

클로저는 캡처한 변수의 참조를 보유합니다. 고루틴에서 클로저를 사용할 때 루프 변수 캡처에 주의하세요.

주의할 점

루프에서 고루틴과 클로저를 함께 사용할 때 루프 변수를 직접 캡처하면 마지막 값만 참조됩니다. Go 1.22+에서는 루프 변수가 매 반복 새로 생성되어 이 문제가 해결되었습니다.

자주 묻는 질문

클로저 패턴란 무엇인가요?

클로저는 외부 변수를 캡처하는 함수입니다. 상태를 유지하는 카운터, 팩토리, 메모이제이션 등에 활용됩니다.

클로저 패턴 학습 시 주의할 점은 무엇인가요?

루프에서 고루틴과 클로저를 함께 사용할 때 루프 변수를 직접 캡처하면 마지막 값만 참조됩니다. Go 1.22+에서는 루프 변수가 매 반복 새로 생성되어 이 문제가 해결되었습니다.

Continue Learning

Go 학습을 이어가세요

총 200개의 독립 HTML 학습 문서 중 하나입니다. 각 문서는 고유 URL과 canonical 메타데이터를 가집니다.