C# 익명 메서드 사용법: delegate 문법과 람다식의 차이

C# 익명 메서드를 delegate 키워드로 작성하는 방법과 람다식으로 바꾸는 기준을 설명합니다. 오래된 예제의 의미는 살리되 현재 기준에서 잘못 적용하기 쉬운 부분을 함께 고쳤어요. 아래 순서대로 확인하면 단순한 화면 복사보다 실제 판단에 도움이 됩니다.

C# delegate 키워드로 익명 메서드를 작성한 기존 코드 화면
익명 메서드는 이름 없이 델리게이트 인스턴스에 실행 코드를 전달합니다.

익명 메서드는 이름 없는 실행 블록이다

익명 메서드는 별도의 메서드 이름을 만들지 않고 델리게이트가 실행할 코드를 바로 작성하는 문법입니다. 짧은 콜백을 한 번 전달할 때 코드가 가까이 모인다는 장점이 있어요.

Action<string> print = delegate(string message)
{
    Console.WriteLine(message);
};

print("처리가 끝났습니다.");

매개변수와 반환 형식은 대입되는 델리게이트 형식과 맞아야 합니다. 이름이 없다는 점만 다를 뿐, 실행될 때는 일반 메서드처럼 인수를 받고 결과를 반환합니다.

람다식이 더 짧지만 의미는 비슷하다

위 코드는 message => Console.WriteLine(message)로 줄일 수 있습니다. 현대 C#에서는 람다식이 더 흔하지만, 오래된 코드에서 delegate 문법을 만나면 같은 종류의 익명 함수로 이해하면 돼요. 여러 문장이 필요하면 중괄호 블록을 사용하고, 한 식으로 충분하면 식 람다가 읽기 쉽습니다.

짧게 쓸 수 있다는 이유로 복잡한 업무 규칙을 람다 하나에 몰아넣지는 마세요. 이름이 설명에 도움이 되거나 여러 곳에서 재사용한다면 일반 메서드로 분리하는 편이 낫습니다.

외부 변수와 이벤트 해제를 조심한다

익명 함수는 바깥 지역 변수를 캡처할 수 있습니다. 반복문의 변수를 캡처하면 실행 시점의 값이 예상과 다를 수 있으므로 각 반복에서 별도 지역 변수로 복사하는 방식이 안전해요. 이벤트에 익명 함수를 직접 등록하면 나중에 같은 인스턴스를 찾기 어려워 해제가 곤란할 수도 있습니다.

선택 기준짧고 한 번 쓰는 콜백은 람다, 기존 문법을 유지해야 하면 익명 메서드, 재사용·테스트·이벤트 해제가 필요하면 이름 있는 메서드를 권합니다.

디버깅할 때는 호출 위치와 캡처 값을 함께 본다

익명 함수에서 예외가 발생하면 코드가 선언된 위치와 실제로 호출된 시점이 떨어져 있을 수 있습니다. 중단점을 선언부에만 두지 말고 델리게이트를 실행하는 곳에도 두세요. 캡처한 지역 변수는 호출 시점의 값을 사용하므로 디버거에서 그 값이 언제 바뀌었는지 확인해야 합니다.

컬렉션의 각 항목에 콜백을 만들 때는 항목을 지역 변수로 분리하면 의도가 분명해져요. 이벤트 구독은 수명이 긴 객체를 붙잡아 둘 수 있으므로, 해제가 필요한 구조라면 익명 람다를 바로 넣기보다 변수나 이름 있는 메서드로 참조를 보관합니다.

예제를 직접 확인하는 순서

코드를 그대로 읽는 데서 끝내지 말고 작은 콘솔 프로젝트에 옮겨 정상 입력과 잘못된 입력을 각각 실행해 보세요. 컴파일 오류와 실행 중 예외는 원인이 다릅니다. 경고가 표시되면 무시하지 말고 사용 중인 .NET과 C# 언어 버전도 확인합니다.

예제의 이름과 출력 문장은 바꿔도 핵심 형식과 호출 구조는 유지해야 해요. 한 줄씩 수정하면서 결과가 왜 달라지는지 기록하면 문법을 외우는 것보다 오래 남습니다. 운영 코드에 적용하기 전에는 null, 빈 값, 예상 범위를 벗어난 값도 별도 테스트로 확인하세요.

자주 묻는 질문

기존 글의 게시일과 URL은 바뀌나요?

아니요. 이 글은 기존 게시물을 보완한 것이며 원래 공개 URL을 유지합니다.

화면이 글과 다르면 어떻게 하나요?

서비스 화면과 메뉴는 바뀔 수 있으므로 글의 원리와 공식 문서를 먼저 확인하고 현재 화면에서 같은 기능명을 찾으세요.

한 번 설정하면 다시 확인하지 않아도 되나요?

버전·정책·환경이 바뀔 수 있습니다. 업데이트나 스킨 변경 뒤에는 핵심 동작을 다시 점검하는 편이 안전합니다.

공식 자료

이 글은 기존 게시물의 URL과 기록 가치를 유지하면서 현재 독자가 실행할 수 있도록 내용을 다시 확인해 보완했습니다.

댓글

이 블로그의 인기 게시물

Iptime Extender2 설치,설정하기

WAN Port를 사용한 네트워크 구성시 유의사항

ipTIME 공유기 LED 끄기: 관리도구에서 모델별 메뉴 찾는 법