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; // 현재까지의 총 요금 반환
        };
    }
}

💡 코드 설명

  1. TaxiDriver(5000)을 호출하면, 기본 요금 5000원을 설정합니다.
  2. taxi(3)을 호출하면, 3km당 1000원씩 추가되어 8000원이 됩니다.
  3. taxi(2)을 호출하면, 이전 값을 유지하고 2km 더 가서 10000원이 됩니다.
  4. totalFare 변수가 TaxiDriver 함수 실행이 끝나도 계속 유지되면서 업데이트됩니다.
    • 이것이 바로 클로저의 핵심 기능입니다! 🎯

🔹 클로저가 유용한 경우

상태 유지가 필요한 경우

  • 위의 택시 요금 계산처럼 외부 변수를 기억해야 하는 상황에서 활용됩니다.

이벤트 핸들러

  • 특정 값을 저장하고 이벤트 발생 시 사용할 때 유용합니다.

지연 실행 (Lazy Evaluation)

  • 나중에 실행해야 하는 코드에서 외부 상태를 유지할 때 사용됩니다.

📝 마무리 정리

C#의 클로저는 "외부 변수 값을 기억하고, 함수가 실행된 후에도 유지하는 기능" 입니다. 🚀
택시 기사가 목적지를 기억하고 운전하는 것처럼, 함수가 특정 상태를 기억하고 계속 활용할 수 있도록 해줍니다!