PHpullh
학습 라이브러리/Go/함수형 패턴 기초

GO · 함수형

함수형 패턴 기초

Go에서 일급 함수, 고차 함수, 순수 함수 개념을 활용한 함수형 프로그래밍 패턴입니다.

함수형중급functionalpure-functionhigher-orderpredicate

핵심 설명

Go에서 일급 함수, 고차 함수, 순수 함수 개념을 활용한 함수형 프로그래밍 패턴입니다.

Go code

package main

import "fmt"

// 순수 함수: 부수 효과 없음
func double(n int) int { return n * 2 }
func isEven(n int) bool { return n%2 == 0 }

// 고차 함수: 함수를 인자로 받음
func apply(nums []int, fn func(int) int) []int {
	result := make([]int, len(nums))
	for i, n := range nums { result[i] = fn(n) }
	return result
}

// 술어 합성
func and[T any](p1, p2 func(T) bool) func(T) bool {
	return func(v T) bool { return p1(v) && p2(v) }
}

func not[T any](p func(T) bool) func(T) bool {
	return func(v T) bool { return !p(v) }
}

func main() {
	nums := []int{1, 2, 3, 4, 5, 6}
	fmt.Println(apply(nums, double))   // [2 4 6 8 10 12]

	isPositive := func(n int) bool { return n > 0 }
	isPositiveEven := and(isPositive, isEven)
	fmt.Println(isPositiveEven(4))  // true
	fmt.Println(isPositiveEven(-2)) // false

	isOdd := not(isEven)
	fmt.Println(isOdd(3)) // true
}

학습 팁

순수 함수는 테스트하기 쉽고 동시성 안전합니다. 가능하면 부수 효과를 함수 경계 밖으로 밀어내세요.

주의할 점

클로저가 외부 변수를 변경하면 순수 함수가 아닙니다. 함수형 스타일에서는 값을 반환하여 상태를 전달하세요.

자주 묻는 질문

함수형 패턴 기초란 무엇인가요?

Go에서 일급 함수, 고차 함수, 순수 함수 개념을 활용한 함수형 프로그래밍 패턴입니다.

함수형 패턴 기초 학습 시 주의할 점은 무엇인가요?

클로저가 외부 변수를 변경하면 순수 함수가 아닙니다. 함수형 스타일에서는 값을 반환하여 상태를 전달하세요.