티스토리 뷰
람다식을 알아보기 전에 익명 메소드부터 알고 있으면 편하기 때문에
익명 메소드에 대해 먼저 설명을 해야겠다.
익명메소드는 말 그대로 이름이 없는 메소드입니다.
메소드인데 어떻게 이름이 없을까? 다음 코드를 보면 익명 메소드가 뭔지 감이 잡힐 것이다.
delegate int Calc(int a, int b);
public static void Main()
{
Calc calc;
calc = delegate (int a, int b)
{
return a + b;
}
}
익명메소드는 자신을 참조할 델리게이트 형식과 동일한 형식으로 선언되어야 한다.
델리게이트의 반환 형식이 int 면 익명메소드의 반환 형식도 int여야하고
델리게이트의 매개 변수 목록이 3개면 익명메소드의 매개 변수고 3개를 받아와야 한다.
마냥 불편해 보이는 익명메소드지만 어디서 사용을 하냐면
델리게이트가 참조할 메소드를 넘겨야 할 일이 생겼는데, 이 메소드가 두 번 다시 사용할 일이 없다고 판단되면
그 때가 익명 메소드를 사용할 타이밍이다.
람다식
람다식은 익명 메소드를 만들기 위해 사용이 된다.
다만 람다식으로 만든 익명 메소드는 무명 함수라고 불린다.
다음과 같이 선언을 한다
매개 변수 목록 => 식
=> 이 연산자는 "입력" 연산자입니다. 그저 매개 변수를 전달하는 역할입니다.
람다식에서는 =>를 중심으로 왼편에는 매개 변수가 오른편에는 식이 위치하게 된다.
다음은 람다식의 선언예이다.
delegate int Calculate(int a, int b);
static void Main(string[] args)
{
Calcuate calc = (int a, int b) => a + b;
}
순수한 매개 변수 목록과 계산 코드, 그리고 매개 변수를 계산 코드 안으로 입력시키는 => 연산자로만 이루어져
매우 간결하다. 이 뿐만이 아니라 C# 컴파일러는 위 코드를 더 간결하게 만들 수 있도록
형식 유추라는 기능을 제공한다.
다음은 형식 유추를 적용한 예다.
delegate int Calculate(int a , int b);
static void Main(string[] args)
{
Calculate calc = (a, b) => a + b;
}
C# 컴파일러는 델리게이트의 선언 코드로부터 람다식이 만드는 익명 메소드의 매개 변수 형식을 유추해낸다.
위에서 살펴본 람다식은 "식" 형식이다.
문 형식의 람다식
문 형식의 람다식은 조건문같은 문장을 사용할 수도 있다.
문 형식은 => 연산자의 오른편에 식 대신 {}로 둘러싸인 코드 블록이 위치한다.
다음은 문 형식의 예제이다.
delegate void DoSomething();
static void Main(string[] args)
{
DoSomething DoIt = ( ) =>
{
Console.WriteLine("하이");
Console.WriteLine("안녕");
};
}
매개 변수가 없는 경우에는 ( ) 사이에 아무것도 넣지 않는다.
지금까지 람다식을 사용하기 위해서는 델리게이트를 하나 선언하고 익명 메소드나 무명 함수를 만들고
그랬는데 이 문제를 해결하기 위해 마소는 .NET 프레임 워크에 Func와 Action 델리게이트를 미리 선언을 해뒀다.
Func는 결과를 반환하는 메소드를 참조하기 위해
Action은 결과를 반환하지 않는 메소드를 참조한다.
Func 델리게이트
Func 델리게이트는 입력 매개 변수가 하나도 없는 것부터 16개에 이르는 것까지 버전이 다양하기 때문에
어지간한 경우가 아니면 별도의 델리게이트를 만들어 쓸 필요가 없다.
모든 Func 델리게이트의 형식 매개 변수 중 가장 마지막에 있는 것이 반환 형식이다.
형식 매개 변수가 하나 뿐이면 그 하나가 반환 형식이고 두 개면 두번째, 세 개면 세번째 이렇게 사용이 된다.
다음은 Func 델리게이트의 사용 예제 이다.
Func<int> func1 = () => 10; // 매개 변수 없으며 무조건 10 반환
Console.WriteLine(func1()); // 10 출력
Func<int, int> func2 = (x) => x*2; // 매개 변수 int 형식 하나, 반환 형식도 int
Console.WriteLine(func2(3)); // 6 출력
Action 델리게이트
Func 델리게이트와 똑같다.
차이점이라면 반환 형식이 없다는 것이다.
Func 와는 달리 어떤 결과를 반환하는 것을 목적으로 하지 않고, 일련의 작업을 수행하는 것이 목적이다.
다음은 사용 예시이다.
Action act1 = () => Console.WriteLine("Action()");
act1();
////
int result = 0;
Action<int> act2 = (x) => result = x * x;
act2(3);
Console.WriteLine("result : {0}", result);//9 출력
- Total
- Today
- Yesterday
- 글로
- visual studio code
- 조건문
- 안드로이드 스튜디오
- TAG
- Link
- C언어
- 언리얼엔진
- 생활코딩
- php
- css
- inline
- PHP&MySQL
- HTML
- 객체
- 변수
- 차이점
- 알고리즘
- 생활코딩#동영상을#글로#html
- 생활코딩#MySQL
- GRID
- 관계형데이터베이스
- 동영상을
- 언리얼엔진4
- 문자열
- javascript
- 기초
- 네트워크 프로그래밍
- 정렬
- 선택자
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |