2026년 상식닷컴 선정 식당 & 카페 리스트
최근에 오픈한 호텔을 찾는다면 살펴보세요

C#의 Action과 Func의 차이는 무엇인가요?

_____
Q1: C 에서 Action과 Func의 기본적인 차이는 무엇인가요?
A1: Action은 반환 값이 없는 메서드를 참조할 때 사용하는 델리게이트이고, Func는 반환 값이 있는 메서드를 참조할 때 사용하는 델리게이트입니다.

---

Q2: Action 델리게이트의 시그니처는 어떻게 되나요?
A2: Action 델리게이트는 0개부터 16개까지의 입력 매개변수를 받을 수 있으며, 반환 타입은 항상 void입니다. 예를 들어:
- `Action` : 매개변수 없이 void 반환
- `Action` : T 타입 매개변수 1개, void 반환
- `Action` : T1, T2 타입 매개변수 2개, void 반환 등

---

Q3: Func 델리게이트의 시그니처는 어떻게 되나요?
A3: Func 델리게이트는 0개부터 16개까지의 입력 매개변수를 받을 수 있으며, 마지막 타입 인자가 반환 타입을 나타냅니다. 예를 들어:
- `Func` : 매개변수 없이 TResult 반환
- `Func` : T 타입 매개변수 1개, TResult 반환
- `Func` : T1, T2 타입 매개변수 2개, TResult 반환 등

---

Q4: Action과 Func를 주로 언제 사용하나요?
A4:
- Action은 작업 실행, 이벤트 핸들러, 콜백 등 반환값이 필요 없는 메서드를 참조할 때 사용합니다.
- Func는 계산, 변환, 조건 판단처럼 결과값이 필요한 메서드를 참조할 때 사용합니다.

---

Q5: Action과 Func는 delegate와 어떻게 다른가요?
A5: Action과 Func는 미리 정의된 제네릭 delegate 타입입니다. 직접 delegate를 선언하여 사용할 수 있지만, Action과 Func를 이용하면 코드가 간결해지고 재사용성이 높아집니다.

---

Q6: Action과 Func의 매개변수 개수 제한이 있나요?
A6: 네, 둘 다 최대 16개의 매개변수를 받을 수 있습니다. 이 이상 필요하면 직접 delegate를 선언하거나 다른 설계를 고려해야 합니다.

---

Q7: Action과 Func를 람다식과 함께 사용하는 예는?
A7:
- Action 예: `Action print = s => Console.WriteLine(s);` — 문자열을 받아 출력하고 반환 없음
- Func 예: `Func add = (a, b) => a + b;` — 두 정수를 받아 합을 반환

---

요약:
| 구분 | 매개변수 | 반환형 | 주요 용도 | 예시 |
|------------|-----------------|---------------|------------------------|---------------------------|
| Action | 0~16개 | void | 반환값 없는 메서드 참조 | `Action a = x => Console.WriteLine(x);` |
| Func | 0~16개 (최종 인자 제외) | 최종 타입 반환 | 반환값 있는 메서드 참조 | `Func f = (x, y) => x + y;` |
C 에서 `Action`과 `Func`는 모두 델리게이트(delegate) 타입으로, 메서드를 참조하거나 메서드를 인자로 전달할 수 있는 기능을 제공합니다.

그러나 이 두 가지는 사용 목적과 반환 값의 유무에 따라 차이가 있습니다.

아래에서 이 두 개념을 자세히 설명하겠습니다.

Action `Action`은 반환 값이 없는 메서드를 나타내는 델리게이트입니다.

즉, `Action`은 메서드가 실행된 후 아무것도 반환하지 않는 경우에 사용됩니다.

`Action`은 최대 16개의 매개변수를 가질 수 있으며, 매개변수의 타입은 다양하게 지정할 수 있습니다.

사용 예시 ```csharp using System; class Program { static void Main() { // 매개변수가 없는 Action Action greet = () => Console.WriteLine("Hello, World!"); greet(); // "Hello, World!" 출력 // 매개변수가 있는 Action Action printMessage = message => Console.WriteLine(message); printMessage("Hello, C !"); // "Hello, C !" 출력 // 매개변수가 여러 개인 Action Action addAndPrint = (a, b) => Console.WriteLine(a + b); addAndPrint(5,

10); // 15 출력 } } ``` Func `Func`는 반환 값이 있는 메서드를 나타내는 델리게이트입니다.

`Func`는 최소 1개의 매개변수를 가질 수 있으며, 마지막 매개변수는 반환 값의 타입을 지정합니다.

`Func`는 최대 16개의 매개변수를 가질 수 있습니다.

사용 예시 ```csharp using System; class Program { static void Main() { // 매개변수가 없는 Func Func getRandomNumber = () => new Random().Next(1, 100); Console.WriteLine(getRandomNumber()); // 1에서 99 사이의 랜덤 숫자 출력 // 매개변수가 있는 Func Func add = (a, b) => a + b; int result = add(5,

10); Console.WriteLine(result); // 15 출력 // 문자열을 정수로 변환하는 Func Func parseInt = str => int.Parse(str); int number = parseInt("123"); Console.WriteLine(number); // 123 출력 } } ``` 주요 차이점 1. 반환 값 : - `Action`: 반환 값이 없습니다.

메서드가 작업을 수행하지만 결과를 반환하지 않을 때 사용합니다.

- `Func`: 반환 값이 있습니다.

메서드가 작업을 수행하고 결과를 반환할 때 사용합니다.



2. 사용 용도 : - `Action`: 주로 이벤트 핸들러, 콜백 메서드, 또는 특정 작업을 수행하는 데 사용됩니다.

- `Func`: 계산이나 변환 작업을 수행하고 결과를 반환해야 할 때 사용됩니다.



3. 매개변수 수 : - `Action`: 0개에서 16개까지의 매개변수를 가질 수 있습니다.

- `Func`: 1개에서 16개까지의 매개변수를 가질 수 있으며, 마지막 매개변수는 반환 값의 타입을 나타냅니다.

결론 C 에서 `Action`과 `Func`는 메서드를 참조하고 전달하는 데 유용한 도구입니다.

`Action`은 반환 값이 없는 작업을 수행할 때, `Func`는 결과를 반환하는 작업을 수행할 때 사용됩니다.

이 두 가지를 적절히 활용하면 코드의 가독성과 재사용성을 높일 수 있습니다.

작성자: 정하영 [비회원] | 작성일자: 1년 전 2024-09-09 08:38:59
조회수: 167 | 댓글: 0 | 좋아요: 0 | 싫어요: 0
내용이 부정확하다면 싫어요를 클릭해주세요.