SA성아 2024. 12. 11. 15:30

클로저(Closure)를 지원하는 언어

 

  • JavaScript: JavaScript는 클로저를 지원하는 대표적인 언어입니다. 함수 내에서 선언된 변수는 함수 외부에서 접근할 수 있으며, 이를 통해 클로저를 생성할 수 있습니다.
  • Python: Python에서도 클로저를 지원합니다. 함수 내에서 선언된 변수를 외부 함수에서 참조할 수 있어 클로저가 가능합니다.
  • Ruby: Ruby는 람다와 프로시저를 통해 클로저를 구현할 수 있습니다. 블록이나 메소드를 통해 클로저를 활용할 수 있습니다.
  • Swift: Swift에서는 클로저를 지원하며, 클로저가 외부 변수에 접근하고 이를 캡처하여 사용할 수 있습니다. 특히 capture lists를 통해 외부 변수의 메모리 관리도 할 수 있습니다.
  • Scala: Scala에서는 함수형 프로그래밍을 지원하며, 클로저를 활용할 수 있습니다. 함수는 객체처럼 다룰 수 있고, 다른 함수에 전달되어 클로저가 형성됩니다.
  • Java: Java에서는 람다 표현식과 익명 클래스를 사용해 클로저를 만들 수 있습니다. Java 8 이상에서는 함수형 프로그래밍을 지원하면서 클로저 개념이 도입되었습니다.
  • Clojure: Clojure는 함수형 프로그래밍 언어로, 클로저를 기본적으로 지원하며, 클로저를 활용하는 코드가 자주 등장합니다.
  • Haskell: Haskell은 함수형 프로그래밍 언어로, 클로저가 자연스럽게 활용됩니다. Haskell의 함수는 1급 객체로 취급되어 클로저를 만들 수 있습니다.
  • Lisp: Lisp는 클로저를 잘 지원하는 함수형 언어입니다. 특히, 함수가 1급 객체로 취급되기 때문에 클로저를 쉽게 구현할 수 있습니다.
  • Go: Go 언어에서도 클로저를 사용할 수 있습니다. Go의 함수는 1급 객체로 취급되며, 클로저를 생성할 수 있습니다.

 

 

add1의 자료형

시험에 나올수도

 

 

 

방법1

func math(x: Int, y: Int, cal: (Int, Int) -> Int) -> Int {
    return cal(x, y)    // add1(1, 2)
}
print(math(x: 1, y: 2, cal: add1))

 

방법2

let a = math(x: 10, y: 20, cal: { (x:Int, y:Int) -> Int in
    return x+y
})
print(a)

 

방법3

a = math(x: 100, y: 200) { (x:Int, y:Int) -> Int in
    return x+y
}   // 후행 클로저(trailing closure)
print(a)

2와 3은 같은 소스

 

 

출처: iOS 프로그래밍 기초 강의 자료