Language/C#
[C#] C# 클로저(Closure) 쉽게 이해하기
잔소리대마왕
2025. 2. 7. 17:57
"클로저가 뭐지?" 하시는 분들을 위해 생활 속 예시와 코드를 통해 쉽게 설명해 드립니다.
📌 클로저(Closure)란?
클로저는 "외부 변수나 상태를 캡처하고 기억하는 함수" 입니다. 즉, 함수가 선언된 환경의 변수를 함수 내부에서 계속 유지할 수 있도록 해주는 기능입니다.
🚗 생활 속 예시: 택시 기사와 손님
택시를 탔다고 가정해 보겠습니다. 🚖
- 손님이 "서울역으로 가주세요!" 라고 요청하면,
- 택시 기사는 "목적지: 서울역" 을 기억합니다.
- 이후 운전하는 동안에도 "서울역까지 가야 한다" 는 정보를 유지하며 길을 찾아갑니다.
- 결국, 서울역에 도착하면 손님을 내려줍니다.
즉, 클로저는 "특정 상태(서울역이라는 목적지)를 기억하는 함수" 라고 볼 수 있습니다.
🛠 C#에서의 클로저 예제
using System;
class Program
{
static void Main()
{
Func<int, int> taxi = TaxiDriver(5000); // 기본 요금 5000원 설정
Console.WriteLine(taxi(3)); // 3km 이동 -> 결과: 8000원
Console.WriteLine(taxi(2)); // 추가 2km 이동 -> 결과: 10000원
}
static Func<int, int> TaxiDriver(int baseFare)
{
int totalFare = baseFare; // 기본 요금
int perKmFare = 1000; // km당 요금
return (int km) =>
{
totalFare += km * perKmFare; // 이동 거리만큼 요금 증가
return totalFare; // 현재까지의 총 요금 반환
};
}
}
💡 코드 설명
- TaxiDriver(5000)을 호출하면, 기본 요금 5000원을 설정합니다.
- taxi(3)을 호출하면, 3km당 1000원씩 추가되어 8000원이 됩니다.
- taxi(2)을 호출하면, 이전 값을 유지하고 2km 더 가서 10000원이 됩니다.
- totalFare 변수가 TaxiDriver 함수 실행이 끝나도 계속 유지되면서 업데이트됩니다.
- 이것이 바로 클로저의 핵심 기능입니다! 🎯
🔹 클로저가 유용한 경우
✔ 상태 유지가 필요한 경우
- 위의 택시 요금 계산처럼 외부 변수를 기억해야 하는 상황에서 활용됩니다.
✔ 이벤트 핸들러
- 특정 값을 저장하고 이벤트 발생 시 사용할 때 유용합니다.
✔ 지연 실행 (Lazy Evaluation)
- 나중에 실행해야 하는 코드에서 외부 상태를 유지할 때 사용됩니다.
📝 마무리 정리
C#의 클로저는 "외부 변수 값을 기억하고, 함수가 실행된 후에도 유지하는 기능" 입니다. 🚀
택시 기사가 목적지를 기억하고 운전하는 것처럼, 함수가 특정 상태를 기억하고 계속 활용할 수 있도록 해줍니다!