Go 언어

본문 바로가기
사이트 내 전체검색


Go 언어
Go 언어

3. 클로저 사용하기

페이지 정보

작성자 관리자 댓글 0건 조회 3,170회 작성일 19-03-12 21:58

본문

3. 클로저 사용하기

클로저는 함수 안에서 함수를 선언 및 정의 할 수 있고, 바깥쪽 함수에 선언된 변수에도 접근할 수 있는 함수를 말한다.


변수 := func(매개변수명 자료형) 리턴값_자료형 {}


익명함수는 일반적인 함수와 달리 함수를 정의할 때 이름이 없다.

매개변수와 리턴값을 지정하는 방법과 함수를 호출하는 방법은 일반적인 함수와 같다.

단, 함수가 들어있는 변수를 함수처럼 호출하게 된다.

package main

import "fmt"

//    ↓ 함수 안에서
func main() {

 //      ↓ 익명 함수를 선언 및 정의
 sum := func(a, b int) int {

  return a + b

 }

 r := sum(1, 2) // 익명함수 사용

 fmt.Println(r) // 3

} 



y=ax+b를 구하는 함수를 작성해보겠다.


package main

import "fmt"

func main() {

 a, b := 3, 5

 f := func(x int) int {

  return a*x + b // 함수 바깥의 변수 a, b 사용

 }

 y := f(5)

 fmt.Println(y) // 20

} 


왜 복잡하게 클로저를사용할까? 다음예제를 보면 이유를 알 수 있다.


package main

import "fmt"

//              ↓ 리턴 값이 익명 함수
func calc() func(x int) int {

 a, b := 3, 5           // 지역 변수는 함수가 끝나면 소멸되지만
 return func(x int) int {

  return a*x + b // 클로저이므로 함수를 호출 할 때마다 변수 a와 b의 값을 사용할 수 있음

 }
 // ↑ 익명 함수를 리턴

}

func main() {

 f := calc() // calc 함수를 실행하여 리턴값으로 나온 클로저를 변수에 저장

 fmt.Println(f(1)) // 8
 fmt.Println(f(2)) // 11
 fmt.Println(f(3)) // 14
 fmt.Println(f(4)) // 17
 fmt.Println(f(5)) // 20

} 


Go 언어의 함수는 일반 자료형 뿐만 아니라 함수 자체도 리턴할 수 있다.

이때는 함수의 리턴값 자료형 부분에 리턴할 함수의 형태를지정해 준다.


fimc 함수명() func(매개변수명 자료형) 리턴값_자료형


따라서 정수형 매개변수, 정수형 리턴값 형태의 함수를 리턴한다면 func calc() func(x int) int 가 된다.


익명함수를 람다함수라고 한다.



댓글목록

등록된 댓글이 없습니다.


개인정보취급방침 서비스이용약관 모바일 버전으로 보기 상단으로

TEL. 063-469-4551 FAX. 063-469-4560 전북 군산시 대학로 558
군산대학교 컴퓨터정보공학과

Copyright © www.leelab.co.kr. All rights reserved.