본문 바로가기

프로그래밍/기본기ㆍ자료구조

람다식

728x90
반응형

개념

- 이름이 없는 메소드

- delegate변수로 즉석에서 함수를 만들어 할당하는 방식

- 휘발성 함수를 정의할 때 사용

- 지연 연산을 통한 퍼포먼스 향상

- 디버깅 시 콜스택 추적이 어려움

- 남용 시 가독성이 더욱 떨어져 이해하기가 어려워질 수 있음

- C#에서 람다식이 본격적으로 지원되기 시작한 것은 .NET Framework 3.5부터

사용 방법

- 기본적으로 .Net Framework에서 System.Func<>와 System.Action를 제공한다.

- 위 Func와 Action를 쓰지 않아도 상관은 없다.

(별도의 delegate를 만들어도 된다.)

public class AnonymousFunctionTest

{

public void VoidFunctionTest()

{

// 파라미터가 없는 void형 함수

System.Action voidFunction = () =>

{

// 함수와 동일하게 내용물을 구현

System.Console.WriteLine(string.Format("voidFunction 호출!"));

};

voidFunction();

}

public void IntFunctionTest()

{

// 파라미터가 없는 int형 함수 (결과값은 10이 찍힌다.)

System.Func<int> intFunction1 = () =>

{

return 10;

};

System.Console.WriteLine(string.Format("intFunction1 : {0}",

intFunction1()));

 

// 이렇게 사용할 수도 있다. (결과값은 10이 찍힌다.)

System.Func<int> intFunction2 = () => 10;

System.Console.WriteLine(string.Format("intFunction2 : {0}",

intFunction2()));

// int형 파라미터을 받는 float형 함수

// Func의 정의를 보면 Func<T, TResult>로 되어 있는데,

// 여기서 TResult가 return타입이다.

// 마찬가지로 Func의 정의를 보면

// Func <T1, T2, T3, T4, T5, T6, TResult>(T1 a, T2 b, T3 c, T4 d, T5 e, T6 f);

// 까지 정의되어 있다.

// 그리고 개인적인 의견이지만 내가 최근 공부 했던 '클린코드' 라는 책에서 말하길

// 파라미터를 많이 넘기는 함수는 안좋은 함수다.

System.Func<int, float> intFunction3 = (floatParameter) =>

{

return 1.0f;

};

// 파라미터로 100을 넘겼지만 리턴값은 1.0f이기 때문에 1.0f이 찍힌다.

System.Console.WriteLine(string.Format("intFunction3 : {0}",

intFunction3(100)));

}

public delegate void DelegateFunction(int i, float f, string str);

public void DelegateFunctionTest()

{

DelegateFunction delegateFunction = (i, f, str) =>

{

System.Console.WriteLine(string.Format("i : {0}, f : {1}, str : {2}", i, f, str));

};

 

// 결과값으로 "i : 0, f : 1.0, str : 테스트"가 찍힌다.

delegateFunction(0, 1.0f, "테스트");

}

}

추가적으로

- 지연 연산을 통한 퍼포먼스 향상

(나무위키에 있던 내용인데 무슨 말인지 모르겠다. 메모리상의 효율성 및 불필요한 연산의 배제가 가능하다는데..)

- 디버깅 시 콜스택 추적이 어려움

(경험상 이건 잘 모르겠다.)

- 나무위키에서는 C#에서 for문 10번 도는 코드와 람다식을 사용한 더 나은 코드가 있는데

한줄로 표현된거 말고는 솔직히 더 나은 코드인지는 모르겠다.

 

다람쥐와 포동포동이

 

 

RememberCook 9월 28일 정식 출시!

두번째 게임인 RememberCook이 출시되었습니다. 귀여운 캐릭터들이 나오는 간단한 게임이며 플레이어의 공간인지능력을 테스트하는 게임입니다. 아래 링크를 통해 다운 받으실 수 있으니 많은 관��

chipmunk-plump-plump.tistory.com

반응형

'프로그래밍 > 기본기ㆍ자료구조' 카테고리의 다른 글

OSI 7계층  (0) 2021.01.28
Goto  (0) 2020.09.25
Dictionary (딕셔너리)  (0) 2020.05.14
Generic (제네릭)  (6) 2020.05.13
Clean Code (클린코드)  (5) 2020.05.03