티스토리 뷰
======================================================
안녕하세요 Doridori 입니다.
이번 강의는 Lambda(람다식)에 대한 강의 입니다.
람다식의 경우 꼭 알아야 할 필요는 없지만 꼭 알아야하는 내용이라고 할 수 있습니다.
람다식을 모른다고 내가 원하는 기능을 구현하지 못하지는 않지만 모른 다면 다른 사람이 짜놓은 코드를 이해 할 수 없습니다.
두가지 목표를 가지고 내용을 보면 좋을것 같은데
1. 람다식으로 짜여진 코드를 해석 할 수 있게 한다.
2. 람다식이 필요한 경우를 확인 한다.
화이팅입니다. ^^
======================================================
Lambda(람다식)
Source UI) Study_30_Lambda (UI).zip
Soruce 전체) Study_30_Lambda.zip
람다식의 경우 새로운 기능이라고 하기 보다는 코드를 간결하게 만들어 주는 구문이라고 보시면 될것 같습니다.
코드를 축약 시키는 기능을 하는데 코드가 축약 된다고 하면 항상 이야기 하는 두가지 점이 있는데 한가지는 코드가 간결하고 짧아 지는 점점과 다른 하나는 짧아지기 때문에 가독성이 떨어집니다.
물론 코드를 간결하게 많이 사용해서 익숙한 개발자의 경우 자연스럽게 사용할 수 있겠지만, 아직 익숙하지 않은 개발자의 경우 코드를 이해하기가 매우 어려워 집니다.
축약 시킬 수 있는 부분이 한정적이기 때문에 남발 할 필요는 없을것 같고 필요한 부분에 가져다 사용 할 경우 기존보다 훨씬 간결한 코드를 작성 할 수 있습니다.
내가 코드를 작성 할 때 억지로 넣어서 사용 할 필요 까지는 없지만 다른 사람이 짜놓은 코드를 천천히 쫓아서 이해할 수 있을 정도는 알아 두면 좋을 것 같습니다.
UI)
이번 화면의 경우 람다식의 내용을 하나씩 확인 해보는 것을 목적으라 작성 하였습닏니다.
(뭔가 심심하다는 느낌을 받을 수 있기는 한데 다른 부분들 보다는 사용 되는 부분들을 집고 넘어가는 것이 좋을 것 같습니다.)
강의)
UI는 간단한데 강의 시간은 1시간 정도 될 정도로 길게 되었습니다. (하다보니 . . . ㅎㅎ)
설명하는 부분들이 많다고 해석 하셔도 될 것 같습니다.
강의를 잘 보시면 가져 가시는 부분이 많다고 생각하시면 될것 같습니다. ㅎㅎㅎ
Source)
코드에 주석을 열심히 달아 놨기 때문에 주석을 보시고 부분 부분 확인하시면서 천천히 따라가시면 좋을 것 같습니다.
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 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 | using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Linq; using System.Text; using System.Threading.Tasks; using System.Windows.Forms; namespace _30_Lambda { public partial class Form1 : Form { /// <summary> /// 프로그램 진입점 /// </summary> public Form1() { InitializeComponent(); } Action _aStepCheck = null; // 다음 step에 대한 내용을 표시해 줄 Text를 Action으로 선언 /// <summary> /// Form이 Load 되는 시점에 호출 /// </summary> /// <param name="sender"></param> /// <param name="e"></param> private void Form1_Load(object sender, EventArgs e) { _aStepCheck = () => lblStepCheck.Text = string.Format(" - 다음 Step은 {0}.{1}", iNowStep, ((enumLambdaCase)iNowStep).ToString()); // 람다식으로 등록 _aStepCheck(); // 다음 Step을 표시하기 위해 Action을 호출 ButtonColorChange(); // Button 색상을 변경 하는 예제 } /// <summary> /// Form Load 시점에 Button Event를 등록 해줌 /// </summary> private void ButtonColorChange() { // Button Event 함수에서 Button 색상 변경 btnColorChange_1.Click += BtnColorChange_1_Click; // 무명 메서드를 사용해서 Button 색상 변경 btnColorChange_2.Click += delegate (object sender, EventArgs e) { btnColorChange_2.BackColor = Color.Brown; }; // 람다식을 사용해서 Button 색상 변경 btnColorChange_3.Click += (sender, e) => btnColorChange_3.BackColor = Color.Coral; } /// <summary> /// Button Event 함수 /// </summary> /// <param name="sender"></param> /// <param name="e"></param> private void BtnColorChange_1_Click(object sender, EventArgs e) { btnColorChange_1.BackColor = Color.Aqua; } int iNowStep = 0; delegate int delIntFunc(int a, int b); delegate string delStringFunc(); /// <summary> /// Button Next를 Click 했을 경우 Case에 맞는 내용을 진행 /// </summary> /// <param name="sender"></param> /// <param name="e"></param> private void btnNext_Click(object sender, EventArgs e) { Lambda(iNowStep); // 람다식 예제를 Switch 형식으로 정리 iNowStep++; _aStepCheck(); // 다음 Step을 표시하기 위해 Action을 호출 } private void Lambda(int iCase) { switch (iCase) { case (int)enumLambdaCase.식형식_람다식: // 식형식 람다식 delIntFunc dint = (a, b) => a * b; int iRet = dint(4, 5); lboxResult.Items.Add(iRet.ToString()); delStringFunc dString = () => string.Format("Lambda Sample 식형식"); string strRet = dString(); lboxResult.Items.Add(strRet.ToString()); break; case (int)enumLambdaCase.문형식_람다식: // 문형식 람다식 delStringFunc dstrSeqment = () => { return string.Format("Lambda Sample 문형식"); }; string strSeqRet = dstrSeqment(); lboxResult.Items.Add(strSeqRet.ToString()); break; case (int)enumLambdaCase.제네릭_형태의_무명메서드_Func: // 제네릭 형태의 무명 메서드 // Func : 반환 값이 있는 형태 Func<int, int, int> fInt = (a, b) => a * b; int fIntRet = fInt(4, 5); lboxResult.Items.Add(fIntRet.ToString()); break; case (int)enumLambdaCase.제네릭_형태의_무명메서드_Action: // 제네릭 형태의 무명 메서드 // Action : 반환값이 없는 형태 Action<string, string> aString = (a, b) => { string strText = String.Format("인자 값 {0}와 {1}을 받았습니다.", a, b); lboxResult.Items.Add(strText.ToString()); }; aString("시간","금"); break; case (int)enumLambdaCase.제네릭_형태의인자__반환_예제: // 배열의 sum 함수의 경우 인자 값이 func<> 형태로 되어있음) int[] iGroup = { 1, 3, 5, 7, 9 }; int iNumSum = iGroup.Sum(x => x); lboxResult.Items.Add(iNumSum.ToString()); string[] strGroup = { "XXX", "TTTT", "YYY" }; int ilengthSum = strGroup.Sum(x => x.Length); lboxResult.Items.Add(ilengthSum.ToString()); break; default: break; } } /// <summary> /// case의 형태 진행 상태를 정리하기 위한 enum 정의 /// </summary> enum enumLambdaCase { 식형식_람다식 = 0, 문형식_람다식 = 1, 제네릭_형태의_무명메서드_Func = 2, 제네릭_형태의_무명메서드_Action = 3, 제네릭_형태의인자__반환_예제 = 4, } } } | cs |
'C# > C# 강좌 Winform' 카테고리의 다른 글
Doridori C# 강의) C# 프로그래밍 무조건 따라하기 (시작하기) (14) | 2019.03.08 |
---|---|
Doridori C# 강의) 31.Linq (링큐) (14) | 2019.02.22 |
Doridori C# 강의) 29.UserControl (사용자 정의 컨트롤) (18) | 2019.01.25 |
Doridori C# 강의) 28. 예외처리 (Exception) (19) | 2019.01.13 |
Doridori C# 강의) 27.Thread Stop (16) | 2018.12.30 |
- Total
- Today
- Yesterday
- WinForm
- C# 강의
- 나들이
- 프로그램 강의
- 게임
- 도리도리 C#
- 칵테일
- 전통주
- 서울
- 와인
- 맛집
- 보드카
- 증류주
- 가볼만한곳
- 막걸리
- 아이랑
- 맥주
- 가볼만한 곳
- 모바일
- 소주
- C# 강좌
- C# 기초 강의
- Visual Studio
- 광저우
- 위스키
- 하이볼
- C#
- 도리도리
- 주말
- 술
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |