클로저는 마치 장난감을 넣어두면 나중에 다시 꺼내서 사용할 수 있는 마법 상자와 같습니다. 다트에서 클로저는 특별한 종류의 함수로, 함수 안에 변수를 넣어두면 나중에 그 변수를 기억하고 사용할 수 있습니다.
void main() {
var a = "A";
Function addA = (String b) => a + b;
print(addA("B")); // "AB" 출력
}
위의 예제에서 addA
함수는 "A"라는 장난감을 기억하는 마법 상자와 같습니다. 함수 addA
를 호출하여 "B"를 넣으면 "A"와 "B"를 합쳐서 "AB"를 반환합니다.
void main() {
int number = 5;
Function addNumber = (int x) => x + number;
print(addNumber(3)); // 8 출력
}
이 예제에서 number
변수는 5로 설정되어 있습니다. addNumber
클로저는 x
라는 정수를 받아서 number
와 합친 결과를 반환합니다. addNumber
함수가 3을 인자로 호출되면 3과 5를 더해 8을 반환합니다.
void main() {
var counter = 0;
Function generateId = () => counter++;
print(generateId()); // 0 출력
print(generateId()); // 1 출력
print(generateId()); // 2 출력
}
위의 예제에서 generateId
함수는 counter
변수를 캡처하여 각 호출마다 counter
값을 증가시키고 반환합니다. 이는 클로저가 외부 상태를 기억하고 유지하는 좋은 예입니다.