PHpullh

GO · 함수

콜백 패턴

함수를 인자로 전달하여 동작을 커스터마이징합니다. 이벤트 처리, 정렬 기준, 필터링 등에 활용됩니다.

함수중급callbackeventemittersort-func

핵심 설명

함수를 인자로 전달하여 동작을 커스터마이징합니다. 이벤트 처리, 정렬 기준, 필터링 등에 활용됩니다.

Go code

package main

import (
	"fmt"
	"slices"
)

type EventHandler func(event string, data any)

type Emitter struct {
	handlers map[string][]EventHandler
}

func NewEmitter() *Emitter {
	return &Emitter{handlers: make(map[string][]EventHandler)}
}

func (e *Emitter) On(event string, h EventHandler) {
	e.handlers[event] = append(e.handlers[event], h)
}

func (e *Emitter) Emit(event string, data any) {
	for _, h := range e.handlers[event] {
		h(event, data)
	}
}

func main() {
	em := NewEmitter()
	em.On("login", func(evt string, data any) {
		fmt.Printf("[%s] 사용자: %v\n", evt, data)
	})
	em.Emit("login", "Gopher")

	// 콜백으로 정렬 기준 지정
	names := []string{"Charlie", "Alice", "Bob"}
	slices.SortFunc(names, func(a, b string) int {
		return len(a) - len(b)
	})
	fmt.Println(names) // [Bob Alice Charlie]
}

학습 팁

콜백 함수의 시그니처를 type으로 정의하면 가독성이 좋아집니다. type Handler func(string) error처럼 사용하세요.

주의할 점

콜백에서 패닉이 발생하면 호출자까지 전파됩니다. 외부 콜백을 실행할 때는 recover로 보호하세요.

자주 묻는 질문

콜백 패턴란 무엇인가요?

함수를 인자로 전달하여 동작을 커스터마이징합니다. 이벤트 처리, 정렬 기준, 필터링 등에 활용됩니다.

콜백 패턴 학습 시 주의할 점은 무엇인가요?

콜백에서 패닉이 발생하면 호출자까지 전파됩니다. 외부 콜백을 실행할 때는 recover 로 보호하세요.