루아, 루비, F# 등등 수많은 언어에는 함수 안에서 함수를 선언할 수 있는 기능이 있습니다. 예를 들어 루아의 경우 아래와 같이 간단하게 함수 안에서 함수를 선언할 수 있죠. function MainFunction() -- LOGIC local function Print = function(str) print(str) end end 하지만 C#에서 아래와 같이 코딩을 한다면 에러가 나게 됩니다. public static void Main(string[] args) { void Print(string a) { Console.WriteLine(a); } } 그렇다면, C#에선 함수 안에서 함수를 선언하기란 불가능한 것일까요? 만약 그랬다면 제가 이 글을 쓰고 있지 않겠죠. 당연히 방법은 있습니다. Action 대리자와 Func 대리자를 사용 하시면 됩니다. Action 대리자 Action 대리자는 함수에 반환값이 없을 때 사용 합니다. 즉, 어떤 함수 내부에 void형 함수를 선언하고 싶을 땐 Action 대리자를 사용하시면 됩니다. Action 대리자의 선언부에선 최대 16개의 요소가 인수의 형식으로 지정 됩니다. public static void Main(string[] args) { Action PrintMessageRepeat = (message, count) => { for (int i = 0; i < count - 1; i++) { Console.Write(message); } } PrintMessageRepeat("안녕! ", 3); } // 결과: ["안녕! 안녕! 안녕!"] Func 대리자 Func대리자는 함수에 반환값이 있을 때 사용 합니다. 즉, 어떤 함수 내부에 void형이 아닌, int, stri