스칼라 클로저


up.gif 스칼라 함수

클로저는 함수 외부에 선언된 하나 이상의 변수에 따라 반환 값이 달라지는 함수입니다.

클로저는 일반적으로 단순히 함수의 지역 변수에 액세스할 수 있는 또 다른 함수로 생각할 수 있습니다.

예를 들어 다음 익명 함수는

val multiplier = (i:Int) => i * 10

함수 본문에 함수의 매개변수로 사용되는 변수 i가 있습니다. 아래의 또 다른 코드는 다음과 같습니다.

val multiplier = (i:Int) => i * factor

승수에는 i와 인수라는 두 가지 변수가 있습니다. i 중 하나는 함수의 형식 매개변수이며 승수 함수가 호출되면 i에 새 값이 할당됩니다. 그러나 요인은 형식 매개변수가 아니라 자유 변수입니다.

var factor = 3  
val multiplier = (i:Int) => i * factor

여기서는 함수 외부에서 정의되는 자유 변수 요인을 소개합니다.

이렇게 정의된 함수 변수 승수는 함수 외부에서 정의된 변수를 참조하기 때문에 "클로저"가 됩니다. 이 함수를 정의하는 과정은 이 자유 변수를 캡처하여 닫힌 함수를 형성하는 것입니다.

전체 예

object Test {  
   def main(args: Array[String]) {  
      println( "muliplier(1) value = " +  multiplier(1) )  
      println( "muliplier(2) value = " +  multiplier(2) )  
   }  
   var factor = 3  
   val multiplier = (i:Int) => i * factor  
}

위 코드를 실행하면 출력 결과는 다음과 같습니다.

$ scalac Test.scala  
$  scala Test  
muliplier(1) value = 3  
muliplier(2) value = 6

up.gif Scala 함수