이 코드는 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)
람다 표현식은 익명 메서드를 간결하게 표현하는 방법입니다. 람다 표현식의 일반적인 형식은 다음과 같습니다:
- parameters: 입력 매개변수 목록입니다.
- expression: 매개변수를 이용하여 실행할 코드입니다.
람다 표현식을 사용하면 간단한 메서드를 짧고 명확하게 표현할 수 있습니다.
3. 예제 코드
아래의 코드는 정수를 입력받아 그 값을 2배로 곱한 후, 그 결과를 문자열로 변환하는 함수를 람다 표현식을 이용하여 정의한 것입니다.
코드 설명
- Func<int, string>: 이 델리게이트는 정수형 매개변수 x를 받아 문자열을 반환하는 함수를 나타냅니다.
- x => (x * 2).ToString(): 람다 표현식으로 정의된 함수입니다. 이 함수는 입력된 정수 x를 받아, 그 값을 2배로 곱한 후, 이를 문자열로 변환하여 반환합니다.
4. 사용 예제
이제 위에서 정의한 함수를 호출해 보겠습니다.
위 코드에서 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 |