English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية

Scala 클로저

클로저는 함수로서, 함수 외부에 선언된 하나 이상의 변수에 의존하는 반환 값을 가집니다.

클로저는 일반적으로 함수 내부의 지역 변수에 접근할 수 있는 또 다른 함수로 간단히 이해할 수 있습니다.

다음과 같은 익명 함수:

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

함수 내에 변수 i가 있습니다. 다음과 같은 다른 코드:

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

multiplier에서는 두 가지 변수가 있습니다: i와 factor. 그 중 하나인 i는 함수의 형식 파라미터로, multiplier 함수가 호출될 때 i에 새로운 값을 할당받습니다. 그러나 factor는 형식 파라미터가 아니라 자유 변수입니다. 다음 코드를 고려해 보세요:

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

여기서는 함수 외부에 정의된 자유 변수 factor를 소개합니다.

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

전체 예제

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  
multiplier(1) value = 3 
multiplier(2) value = 6