카테고리 없음

GoLang에서의 유저 정의 함수 타입

드리프트 2021. 1. 28. 21:45
728x170

 

 

안녕하세요?

 

앞 강좌에서 배운 고랭(golang)의 고차함수에 대해 더 살펴볼 시간입니다.

 

기존 강좌: cpro95.tistory.com/156

 

GoLang의 Higher Order Function

안녕하세요? GoLang의 고차함수(Higher Order Function)에 대해 간단히 알아 보겠습니다. 먼저, 고차 함수는 함수를 인수로 받거나 함수를 반환하는 함수입니다. 즉, 인수로 취하거나 또는 반환되어 다른

cpro95.tistory.com

 

고랭에서는 타입을 유저가 직접 정할 수 있는데 함수타입을 정의해서 고차함수를 이용하는 방법입니다.

 

package main

import "fmt"

func squareSum(x int) func(int) func(int) int {
	return func(y int) func(int) int {
		return func(z int) int {
			return x*x + y*y + z*z
		}
	}
}
func main() {
	// 5*5 + 6*6 + 7*7
	fmt.Println(squareSum(5)(6)(7))
}

 

squareSum 함수의 리턴 타입이 너무 복잡해서 이해하기 어려운데요.

 

바로 유저 타입의 함수 타입을 정의해서 다시 코드를 짜 보겠습니다.

 

package main

import "fmt"

type First func(int) int
type Second func(int) First

func squareSum(x int) Second {
	return func(y int) First {
		return func(z int) int {
			return x*x + y*y + z*z
		}
	}
}

func main() {
	// 5*5 + 6*6 + 7*7
	fmt.Println(squareSum(5)(6)(7))
}

 

유저 타입인 First 와 Second 타입이 각각 func(int) int 와 func(int) First 라고 되어 있습니다.

 

지난 시간의 코드보다 더 쉽게 이해 할 수 있을 겁니다.

 

그리드형