ShovelingLife
A Game Programmer
ShovelingLife
전체 방문자
오늘
어제
  • 분류 전체보기 (1064)
    • 그래픽스 (57)
      • 공통 (19)
      • 수학 물리 (22)
      • OpenGL & Vulkan (1)
      • DirectX (14)
    • 게임엔진 (177)
      • Unreal (69)
      • Unity (97)
      • Cocos2D-X (3)
      • 개인 플젝 (8)
    • 코딩테스트 (221)
      • 공통 (7)
      • 프로그래머스 (22)
      • 백준 (162)
      • LeetCode (19)
      • HackerRank (2)
      • 코딩테스트 알고리즘 (8)
    • CS (235)
      • 공통 (21)
      • 네트워크 (44)
      • OS & 하드웨어 (55)
      • 자료구조 & 알고리즘 (98)
      • 디자인패턴 (6)
      • UML (4)
      • 데이터베이스 (7)
    • 프로그래밍 언어 (346)
      • C++ (167)
      • C# (88)
      • Java (9)
      • Python (33)
      • SQL (30)
      • JavaScript (8)
      • React (7)
    • 그 외 (9)
      • Math (5)
      • 일상 (5)

블로그 메뉴

  • 홈
  • 태그
  • 방명록

공지사항

  • Source Code 좌측 상단에 복사 버튼 추가 완료
  • 언리얼 엔진 C++ 빌드시간 단축 꿀팁
  • 게임 업계 코딩테스트 관련
  • 1인칭 시점으로 써내려가는 글들

인기 글

태그

  • 그래픽스
  • 클래스
  • 언리얼
  • 배열
  • string
  • SQL
  • 프로그래머스
  • 백준
  • 오블완
  • 포인터
  • C++
  • 문자열
  • 티스토리챌린지
  • 유니티
  • 함수
  • C
  • Unity
  • c#
  • 알고리즘
  • 파이썬

최근 댓글

최근 글

티스토리

hELLO · Designed By 정상우.
ShovelingLife

A Game Programmer

프로그래밍 언어/C#

[C#] 람다식 (Lambda Expression)

2024. 1. 29. 16:44

람다식(Lambda)식은 접근자, 함수 이름, return문이 없는 익명 함수(anonymous function)다.

람다식을 사용하면 더 짧은 코드를 작성할 수 있으며 => 연산자를 사용한다.

class Program
{
  static int DoubleFunc(int num)
  {
    return num * 2;
  }
  static void Main(string[] args)
  {
    Console.WriteLine(DoubleFunc(10));
  }
}

// 람다식 사용
class Program
{
  static void Main(string[] args)
  {
    Func<int, int> DoubleFunc = (num) => num * 2;

    int num = 10;
    Console.WriteLine(DoubleFunc(num));         
  }
}

// 실행 결과
20

내장된 제네릭 대리자 Func

Func 제네릭 대리자는 0개 이상의 인수를 가지며, 마지막에 반환 타입을 작성한다.

Func <int, double, int> FuncMethod1;
// int형 매개변수, double형 매개변수, 반환 타입은 int형 

Func <int, int> FuncMethod2;
// int형 매개변수, 반환 타입은 int형

Func <int> Funcmethod3;
// 매개변수 없음, 반환 타입은 int 형
class Program
{
  static int DoubleFunc(int num)
  {
    return num * 2;
  }
  static void Main(string[] args)
  {
    Func<int, int> DoubleFuncDelegate = DoubleFunc;

    int num = 10;
    Console.WriteLine(DoubleFuncDelegate(num));         
  }
}

// 실행 결과
20

Func 람다식

다음 예제는 DoubleFunc 메서드를 제거하고 Func 대리자가 람다식을 가리킨다

class Program
{
  /*
  static int DoubleFunc(int num)
  {
    return num * 2;
  }
  */
  
  static void Main(string[] args)
  {
    Func<int, int> DoubleFuncDelegate = num => num * 2;

    int num = 10;
    Console.WriteLine(DoubleFuncDelegate(num));         
  }
}

 

함수의 매개변수가 1개인 경우 소괄호를 생략해도 되지만, 2개 이상인 경우 소괄호를 사용한다. 다음은 int형 매개변수 2개의 값을 더한 결과를 반환하는 예제다.

class Program
{
  static void Main(string[] args)
  {
    // <int, int, String> int형 2개의 매개변수를 가지며, String타입의 값을 반환합니다.
    // (a, b)는 매개변수입니다.
    // (a + b).ToString()은 a + b 결과를 String으로 변환합니다.
    Func<int, int, String> DoubleFuncDelegate = (a, b) => (a + b).ToString();

    Console.WriteLine(DoubleFuncDelegate(10, 20));
  }
}

// 실행 결과
30

내장된 제네릭 대리자 Action

Action 제네릭 대리자는 0개 이상의 인수를 가지며, void 타입을 반환하므로 반환 타입을 명시하지 않는다.

Action <int, double, int> FuncMethod1;
// int형 매개변수, double형 매개변수, int형 매개변수

Action <int, int> FuncMethod2;
// int형 매개변수, int형 매개변수

Action <int> Funcmethod3;
// int형 매개변수

 

아래 예제는 Action 대리자가 ConsolePrintFunc 메서드를 가지고 있다.

class Program
{
  static void ConsolePrintFunc(int a, int b)
  {
    Console.WriteLine(a + b);
  }
  static void Main(string[] args)
  {
    Action<int, int> ActionDelegate = ConsolePrintFunc;

    ActionDelegate(10, 20);
  }
}

// 실행 결과
30

Action 람다식

class Program
{
  /*
  static void ConsolePrintFunc(int a, int b)
  {
    Console.WriteLine(a + b);
  }
  */
  static void Main(string[] args)
  {
    Action<int, int> ActionDelegate = (a, b) => Console.WriteLine(a + b);

    ActionDelegate(10, 20);
  }
}

로컬 대리자 메서드

int DoubleFuncDelegate(int num) => num * 2;

void ActionDelegate(int a, int b) => Console.WriteLine(a + b);
class Program
{
  static void Main(string[] args)
  {
    int DoubleFunc(int num) => num * 2;
    Console.WriteLine(DoubleFunc(50));

    void ActionFunc(int a, int b) => Console.WriteLine(a + b);
    ActionFunc(10, 20);
  }
}

// 실행 결과
100
30

출처: https://developer-talk.tistory.com/437 [DevStory:티스토리]

저작자표시

'프로그래밍 언어 > C#' 카테고리의 다른 글

[C#] Visual Studio Nuget 설치  (0) 2024.03.05
[C#] Nuget이란?  (0) 2024.03.05
[C#] 배열의 타입을 변경하는 방법 (제네릭 가능)  (0) 2024.01.29
[C#] String Interning  (0) 2024.01.04
[C#] 고성능 서버 - __FILE__, __LINE__ 대체제  (0) 2024.01.04
    '프로그래밍 언어/C#' 카테고리의 다른 글
    • [C#] Visual Studio Nuget 설치
    • [C#] Nuget이란?
    • [C#] 배열의 타입을 변경하는 방법 (제네릭 가능)
    • [C#] String Interning
    ShovelingLife
    ShovelingLife
    Main skill stack => Unity C# / Unreal C++ Studying Front / BackEnd, Java Python

    티스토리툴바