이 코드는 C#에서 델리게이트(delegate)와 람다 표현식(lambda expression)을 사용하여 함수를 정의하는 방법을 보여줍니다. Func<int, string> 타입의 델리게이트를 사용하고 있으며, 이 델리게이트는 정수(int)를 입력받아 문자열(string)을 반환하는 람다 표현식을 나타냅니다. 아래에 이 코드에 사용된 개념들을 설명하고 블로그에 적기 좋은 형식으로 정리해 보겠습니다.


C#에서 Func<int, string>과 람다 표현식 사용하기

C#에서는 델리게이트(delegate)를 사용하여 메서드나 익명 메서드를 변수처럼 다룰 수 있습니다. 델리게이트는 특정한 메서드 시그니처(매개변수와 반환 타입)를 가진 메서드 참조를 나타냅니다. 이번 포스트에서는 Func<T, TResult> 델리게이트와 람다 표현식을 사용하여 간단한 함수를 정의하는 방법을 살펴보겠습니다.

1. Func<T, TResult> 델리게이트

Func<T, TResult>는 C#에서 제공하는 기본 델리게이트 중 하나입니다. 이 델리게이트는 하나 이상의 매개변수를 받고, 결과를 반환하는 메서드를 나타낼 수 있습니다.

  • T: 입력 매개변수의 타입을 나타냅니다.
  • TResult: 반환 타입을 나타냅니다.

예를 들어, Func<int, string>은 정수형 매개변수를 받아 문자열을 반환하는 메서드를 참조할 수 있습니다.

2. 람다 표현식(Lambda Expression)

람다 표현식은 익명 메서드를 간결하게 표현하는 방법입니다. 람다 표현식의 일반적인 형식은 다음과 같습니다:

csharp
코드 복사
(parameters) => expression
  • parameters: 입력 매개변수 목록입니다.
  • expression: 매개변수를 이용하여 실행할 코드입니다.

람다 표현식을 사용하면 간단한 메서드를 짧고 명확하게 표현할 수 있습니다.

3. 예제 코드

아래의 코드는 정수를 입력받아 그 값을 2배로 곱한 후, 그 결과를 문자열로 변환하는 함수를 람다 표현식을 이용하여 정의한 것입니다.

csharp
코드 복사
Func<int, string> square = x => (x * 2).ToString();

코드 설명

  • Func<int, string>: 이 델리게이트는 정수형 매개변수 x를 받아 문자열을 반환하는 함수를 나타냅니다.
  • x => (x * 2).ToString(): 람다 표현식으로 정의된 함수입니다. 이 함수는 입력된 정수 x를 받아, 그 값을 2배로 곱한 후, 이를 문자열로 변환하여 반환합니다.

4. 사용 예제

이제 위에서 정의한 함수를 호출해 보겠습니다.

csharp
코드 복사
int input = 5; string result = square(input); Console.WriteLine(result); // 출력: "10"

위 코드에서 input 값으로 5를 전달하면, 람다 표현식에 의해 5 * 2는 10이 되고, 최종적으로 "10"이라는 문자열이 result에 저장됩니다.

5. 결론

Func<T, TResult> 델리게이트와 람다 표현식을 사용하면 간단한 함수를 매우 간결하게 정의할 수 있습니다. 이 방법은 코드의 가독성을 높이고, 불필요한 메서드 선언을 줄이는 데 유용합니다. C#에서 람다 표현식을 적극 활용하여 더 깔끔한 코드를 작성해 보세요!

 

///// 추가 정리 

 

C#에서 람다식(Lambda Expression)은 익명 함수를 간결하게 표현하는 방식입니다. 
람다식은 매개변수를 받아서, 특정 작업을 수행하고, 결과를 반환하는 함수를 정의하는 데 사용됩니다. 
이러한 람다식은 특히 LINQ 쿼리, 컬렉션의 데이터 조작, 이벤트 처리 등에 많이 사용됩니다.

람다식 기본 구조
람다식의 기본 구조는 다음과 같습니다:

람다식의 기본구조

 

parameters: 함수의 매개변수 목록입니다. 매개변수가 하나인 경우 괄호를 생략할 수 있습니다.
=>: 람다 연산자, 'goes to'로 읽습니다.
expression_or_statement_block: 실행할 식이나 문 블록입니다. 단일 식인 경우 중괄호 {}를 생략할 수 있습니다.

 

람다식 예제


단일 식 람다식

단일 식 람다식

 

Func<int, int>은 입력과 출력이 모두 int 타입인 함수를 나타냅니다.
x => x * x는 x를 입력으로 받아 x * x 값을 반환하는 람다식입니다.


매개변수가 없는 람다식

매개변수가 없는 람다식

 

Action은 매개변수가 없고 반환 값도 없는 람다식을 나타냅니다.
() => Console.WriteLine("Hello, World!")는 인수가 없고 Hello, World!를 출력하는 람다식입니다.


여러 매개변수를 가진 람다식

매개변수가 여러개!

 

★Func<int, int, int>은 두 개의 int를 입력으로 받아 int를 반환하는 함수입니다.★
(x, y) => x + y는 두 개의 매개변수를 받아 더한 값을 반환하는 람다식입니다.


문 블록을 가진 람다식

{} 문 블록을 가진 람다식

이 예제에서는 여러 줄의 코드를 실행하기 위해 중괄호 {}를 사용했습니다.
return 키워드를 사용해 값을 반환할 수 있습니다.


람다식과 델리게이트
람다식은 델리게이트와 함께 자주 사용됩니다. C#에서는 Func<>, Action<>, Predicate<>와 같은 내장 델리게이트 타입을 활용하여 람다식을 델리게이트로 사용합니다.

Func<...> : 반환 값이 있는 델리게이트 타입입니다.

    예: Func<int, int, string>은 두 개의 int를 입력받아 string을 반환하는 함수입니다.


Action<...> : 반환 값이 없는 델리게이트 타입입니다.
    예: Action<int, string>은 int와 string을 입력받아 아무 것도 반환하지 않는 함수입니다.


Predicate<...> : 입력을 받아 bool을 반환하는 델리게이트 타입입니다.
    예: Predicate<int>는 int를 입력받아 bool을 반환하는 함수입니다.


람다식의 활용


LINQ와 람다식

LINQ

 

Where 메서드는 Predicate<int> 델리게이트를 매개변수로 받아 리스트에서 짝수만 필터링합니다.
n => n % 2 == 0은 입력된 숫자가 짝수인지 확인하는 람다식입니다.


이벤트 처리와 람다식

 

Click 이벤트는 EventHandler 델리게이트를 사용합니다.
(sender, e) => Console.WriteLine("Button clicked!")는 이벤트가 발생했을 때 실행될 코드를 람다식으로 표현한 것입니다.

람다식의 장점
간결성: 코드가 짧고 간결해져서 가독성이 좋아집니다.
유연성: 코드 내에서 인라인으로 간단하게 익명 함수를 정의할 수 있어, 굳이 메서드를 정의하지 않아도 됩니다.
고차 함수와의 호환성: 다른 함수의 매개변수로 전달될 때 유용합니다.

람다식의 단점
디버깅 어려움: 너무 복잡한 람다식은 디버깅이 어렵고, 가독성을 해칠 수 있습니다.
복잡한 로직에는 부적합: 여러 줄의 복잡한 로직을 수행해야 하는 경우, 별도의 메서드를 정의하는 것이 더 적합할 수 있습니다.


람다식은 C#에서 매우 강력한 기능으로, 특히 컬렉션을 다루거나 이벤트를 처리할 때 
유용하게 사용됩니다. 적절한 상황에서 활용하면 코드의 가독성과 효율성을 크게 향상시킬 수 있습니다.

 

.

'c# 기초 문법' 카테고리의 다른 글

C# 메서드(2)  (0) 2024.08.08
c# 메서드(1)  (0) 2024.08.07
c# 배열의 선언과 초기화방법  (0) 2024.08.07
c# 배열뒤집기  (0) 2024.08.07
c# 배열 - array, list  (0) 2024.08.07

+ Recent posts