Closure

하요·2024년 7월 3일
0
post-thumbnail

Dart에서 함수와 그 함수가 선언된 환경(스코프)을 함께 저장하는 개념: Closure

클로저는 마치 장난감을 넣어두면 나중에 다시 꺼내서 사용할 수 있는 마법 상자와 같습니다. 다트에서 클로저는 특별한 종류의 함수로, 함수 안에 변수를 넣어두면 나중에 그 변수를 기억하고 사용할 수 있습니다.

  • 클로저는 함수와 그 함수가 선언된 환경을 함께 저장하는 개념입니다.
  • 클로저는 함수가 생성될 때의 변수를 기억하고, 함수가 호출될 때 그 변수를 사용할 수 있습니다.
  • 클로저는 상태를 유지하고, 외부 함수의 변수를 캡처하여 사용할 수 있습니다.

주요 개념

  • 환경 캡처: 클로저는 자신이 생성된 환경의 변수를 캡처하여, 함수가 호출될 때 그 변수를 참조할 수 있습니다.
  • 상태 유지: 클로저를 통해 함수가 생성된 시점의 변수를 기억하고 사용할 수 있습니다.

예시

예시 1: 기본 클로저

void main() {
  var a = "A";
  Function addA = (String b) => a + b;
  print(addA("B")); // "AB" 출력
}

위의 예제에서 addA 함수는 "A"라는 장난감을 기억하는 마법 상자와 같습니다. 함수 addA를 호출하여 "B"를 넣으면 "A"와 "B"를 합쳐서 "AB"를 반환합니다.

예시 2: 변수 캡처

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을 반환합니다.

예시 3: 외부 상태를 이용한 클로저

void main() {
  var counter = 0;
  Function generateId = () => counter++;
  print(generateId()); // 0 출력
  print(generateId()); // 1 출력
  print(generateId()); // 2 출력
}

위의 예제에서 generateId 함수는 counter 변수를 캡처하여 각 호출마다 counter 값을 증가시키고 반환합니다. 이는 클로저가 외부 상태를 기억하고 유지하는 좋은 예입니다.

주요 활용도

  • 상태 유지: 클로저는 함수가 생성된 시점의 상태를 유지하여, 나중에 함수가 호출될 때도 그 상태를 사용할 수 있습니다.
  • 콜백 함수: 비동기 작업에서 클로저를 사용하여 현재의 컨텍스트를 기억합니다.
  • 데이터 은닉: 클로저를 사용하여 변수에 직접 접근할 수 없도록 보호할 수 있습니다.
  • 함수형 프로그래밍: 클로저를 사용하여 고차 함수(함수를 반환하거나 함수를 인자로 받는 함수)를 구현할 수 있습니다.

추가 팁

  • 상태 관리: 클로저를 사용할 때는 함수가 의도치 않은 상태를 유지하지 않도록 주의합니다.
  • 메모리 관리: 클로저가 캡처한 변수가 예상치 못하게 메모리를 차지하는 경우가 있으므로, 불필요한 클로저 사용을 피합니다.

관련 자료

profile
flutter 개발자(진)

0개의 댓글