함수 사용하기


이재홍 http://www.pyrasis.com 2014.12.17 ~ 2015.02.07



함수를 변수에 저장하기

Go 언어는 간단하게 함수를 변수에 저장할 수 있습니다.

  • var 변수명 func(매개변수명 자료형) 리턴값_자료형 = 함수명
func sum(a int, b int) int {
	return a + b
}

func main() {
	var hello func(a int, b int) int = sum // 함수를 저장하는 변수를 선언하고 함수 대입
	world := sum                           // 변수 선언과 동시에 함수를 바로 대입

	fmt.Println(hello(1, 2)) // 3: hello 변수에 저장된 sum 함수 호출
	fmt.Println(world(1, 2)) // 3: world 변수에 저장된 sum 함수 호출
}

실행 결과

3
3

함수를 정의한 뒤 미리 선언한 변수에 대입하기만 하면 함수를 변수에 저장할 수 있습니다. Go 언어는 변수를 선언하고 대입할 때 자동으로 자료형을 추론할 수 있으므로 :=를 사용하면 간단하게 변수에 함수를 저장할 수 있습니다.

변수뿐만 아니라 슬라이스(배열)에도 함수를 간단하게 저장할 수 있습니다.

  • 슬라이스 = []func(매개변수명 자료형) 리턴값_자료형{함수명1, 함수명2}
func sum(a int, b int) int {
	return a + b
}

func diff(a int, b int) int {
	return a - b
}

func main() {
	f := []func(int, int) int{sum, diff} // 함수를 저장할 수 있는 슬라이스를 생성한 뒤 함수로 초기화

	fmt.Println(f[0](1, 2)) // 3: 배열의 첫 번째 요소로 함수 호출
	fmt.Println(f[1](1, 2)) // -1: 배열의 두 번째 요소로 함수 호출
}

실행 결과

3
-1

[ ] 뒤에 매개변수의 자료형과 리턴값의 자료형을 지정해야 하며 { } (중괄호) 안에 대입할 함수명을 나열하면 됩니다.

마찬가지로 맵에도 함수를 간단하게 저장할 수 있습니다.

  • 맵 := map[키_자료형]func(매개변수명 자료형) 리턴값_자료형{ “키”: 함수명 }
func sum(a int, b int) int {
	return a + b
}

func diff(a int, b int) int {
	return a - b
}

func main() {
	f := map[string]func(int, int) int{ // 함수를 저장할 수 있는 맵을 생성한 뒤 함수로 초기화
		"sum":  sum,
		"diff": diff,
	}

	fmt.Println(f["sum"](1, 2))  // 3: 맵에 sum 키를 지정하여 함수 호출
	fmt.Println(f["diff"](1, 2)) // -1: 맵에 diff 키를 지정하여 함수 호출
}

실행 결과

3
-1

저작권 안내

이 웹사이트에 게시된 모든 글의 무단 복제 및 도용을 금지합니다.
  • 블로그, 게시판 등에 퍼가는 것을 금지합니다.
  • 비공개 포스트에 퍼가는 것을 금지합니다.
  • 글 내용, 그림을 발췌 및 요약하는 것을 금지합니다.
  • 링크 및 SNS 공유는 허용합니다.

Published

01 June 2015