C# Action과 람다식: 반환값 없는 콜백을 작성하는 방법

C# Action 델리게이트와 람다식을 연결하는 방법을 설명합니다. 오래된 예제의 의미는 살리되 현재 기준에서 잘못 적용하기 쉬운 부분을 함께 고쳤어요. 아래 순서대로 확인하면 단순한 화면 복사보다 실제 판단에 도움이 됩니다.

C# Action 델리게이트에 람다식을 대입한 기존 예제 화면
Action은 반환값 없는 메서드나 람다식을 참조할 때 사용하는 기본 제공 델리게이트입니다.

Action은 void 반환 콜백을 표현한다

Action은 실행할 코드를 값처럼 전달하되 반환값이 필요하지 않을 때 사용합니다. 인수가 없으면 Action, 인수가 있으면 Action<T>처럼 형식을 지정해요.

Action<string, int> repeat = (text, count) =>
{
    for (int i = 0; i < count; i++)
        Console.WriteLine(text);
};

repeat("안녕하세요", 2);

람다식의 매개변수 개수와 형식은 Action 선언과 맞아야 합니다. 값을 반환하려면 Action이 아니라 Func를 선택해야 해요.

한 식과 여러 문장 람다를 구분한다

한 문장으로 끝나는 경우 message => Console.WriteLine(message)처럼 중괄호를 생략할 수 있습니다. 조건문이나 반복문처럼 여러 문장이 필요하면 블록 람다를 사용해요. 코드를 줄이는 것보다 호출 목적이 한눈에 보이는지가 더 중요합니다.

같은 람다가 여러 곳에서 반복되거나 테스트가 필요하면 이름 있는 메서드로 옮기세요. Action 변수에는 그 메서드 그룹을 그대로 대입할 수 있어 간결함을 잃지 않습니다.

async void 형태의 Action은 신중하게 쓴다

Action은 반환 형식이 void이므로 async 람다를 대입하면 async void가 될 수 있습니다. 호출자가 완료를 기다리거나 예외를 정상적으로 받을 수 없어 이벤트 처리기가 아닌 일반 비동기 작업에서는 위험해요. 비동기 콜백은 가능하면 Func<Task> 또는 Func<T, Task>로 설계합니다.

판단 기준결과가 필요 없으면 Action, 결과가 있으면 Func, 완료를 기다려야 하는 비동기 작업은 Func<Task>를 사용하세요.

콜백 안의 예외가 어디로 전달되는지 확인한다

Action을 동기적으로 호출하면 람다 안의 예외가 호출자에게 전달됩니다. 호출자가 처리해야 하는 오류인지, 콜백 자체에서 복구할 수 있는 오류인지 경계를 정하세요. 예외를 무조건 삼키면 작업이 끝난 것처럼 보이지만 데이터는 일부만 처리될 수 있습니다.

여러 Action을 결합하면 등록된 순서대로 실행되지만 앞의 작업에서 예외가 나면 뒤 호출이 실행되지 않을 수 있어요. 각 작업을 반드시 시도해야 한다면 호출 목록을 순회하며 개별 결과를 기록하는 별도 로직이 필요합니다. 단순 결합과 오류 격리를 같은 것으로 보면 안 됩니다.

예제를 직접 확인하는 순서

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

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

자주 묻는 질문

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

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

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

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

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

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

공식 자료

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

댓글

이 블로그의 인기 게시물

Iptime Extender2 설치,설정하기

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

ORACLE 11g 그리고.. SHA 알고리즘...