๐Ÿ—ฏ๏ธLanguage/C# ๊ฒ€์ƒ‰ ๊ฒฐ๊ณผ

ํ•ด๋‹น ๊ธ€ 31๊ฑด

*์ด ๊ธ€์€ ์ฑ…์„ ๋ฐ”ํƒ•์œผ๋กœ ๊ณต๋ถ€ํ•œ ๊ธ€์ž…๋‹ˆ๋‹ค. ์ต๋ช… ๋ฉ”์†Œ๋“œ์™€ ๋ฌด๋ช… ํ•จ์ˆ˜๋Š” ์ผํšŒ์„ฑ์œผ๋กœ๋งŒ ์‚ฌ์šฉํ•  ํ•จ์ˆ˜ ์‚ฌ์šฉ์— ์šฉ์ดํ•˜๋ฉฐ, ์ฝ”๋“œ๋ฅผ ์ข€ ๋” ๊ฐ„๊ฒฐํ•˜๊ฒŒ ๋งŒ๋“ค์–ด ์ฃผ๋Š” ์š”์†Œ๋“ค์ด๋‹ค. ํ•˜์ง€๋งŒ, ๋‘˜ ๋‹ค ๋Œ€๋ฆฌ์ž(Delegate)๊ฐ€ ํ•„์š”ํ•˜๊ธฐ ๋•Œ๋ฌธ์— ์‚ฌ์ „์— ๋จผ์ € ๋Œ€๋ฆฌ์ž๋ฅผ ์„ ์–ธํ•ด์ค˜์•ผ ํ•˜๋Š” ๋ฒˆ๊ฑฐ๋กœ์›€์ด ์žˆ๋‹ค. ๊ท€์ฐฎ์ง€ ์•Š์„ ์ˆ˜๊ฐ€ ์—†๋‹ค. ํ•œ ๋ฒˆ๋งŒ ์‚ฌ์šฉํ•  ๊ฑด๋ฐ, ์‚ฌ์šฉํ•  ๋•Œ๋งˆ๋‹ค ๋งค๋ฒˆ ๋Œ€๋ฆฌ์ž๋ฅผ ์„ ์–ธํ•ด์•ผ ํ•œ๋‹ค๋‹ˆ... ๊ทธ๋ž˜์„œ ์ด๋Ÿฐ ๋ฒˆ๊ฑฐ๋กœ์›€์„ ํ•ด๊ฒฐํ•ด์ฃผ๊ธฐ ์œ„ํ•ด, ๋งˆ์ดํฌ๋กœ์†Œํ”„ํŠธ .NET์—์„œ๋Š” ์ด๋Ÿฐ ์ต๋ช… ๋ฉ”์†Œ๋“œ์™€ ๋ฌด๋ช… ํ•จ์ˆ˜๋“ค์„ ์œ„ํ•œ ๋Œ€๋ฆฌ์ž๋“ค์„ ๋ฏธ๋ฆฌ ์„ ์–ธ์„ ํ•ด๋†จ๋‹ค. ๊ทธ ๋Œ€๋ฆฌ์ž๋“ค์ด ๋ฐ”๋กœ ์˜ค๋Š˜ ์•Œ์•„๋ณผ Func์™€ Action์ด๋‹ค. Func ๊ฒฐ๊ณผ๋ฅผ ๋ฐ˜ํ™˜ํ•˜๋Š” ๋ฉ”์†Œ๋“œ๋ฅผ ์ฐธ์กฐํ•˜๊ธฐ ์œ„ํ•ด ๋งŒ๋“ค์–ด์กŒ๋‹ค. .NET์—๋Š” ๋ชจ๋‘ 17๊ฐ€์ง€ ๋ฒ„์ „์˜ Func ๋Œ€๋ฆฌ์ž๊ฐ€ ์žˆ๋‹ค. public de..

๐Ÿ—ฏ๏ธLanguage/C# 2022. 3. 29. 12:57

*์ด ๊ธ€์€ ์ฑ…์„ ๋ฐ”ํƒ•์œผ๋กœ ๊ณต๋ถ€ํ•œ ๊ธ€์ž…๋‹ˆ๋‹ค. ๋žŒ๋‹ค์‹ (Lambda Expression) ๋žŒ๋‹ค์‹์€ ์ต๋ช… ๋ฉ”์†Œ๋“œ๋ฅผ ๋งŒ๋“ค๊ธฐ ์œ„ํ•ด ์‚ฌ์šฉํ•œ๋‹ค. ๋žŒ๋‹ค์‹์œผ๋กœ ๋งŒ๋“œ๋Š” ์ต๋ช… ๋ฉ”์†Œ๋“œ๋Š” ๋ฌด๋ช… ํ•จ์ˆ˜(Anonymous Function)๋ผ๊ณ ๋„ ๋ถ€๋ฅธ๋‹ค๊ณ  ํ•œ๋‹ค. ๋ฉ”์†Œ๋“œ๊ฐ€ ์ž…๋ ฅ(๋งค๊ฐœ๋ณ€์ˆ˜)๊ณผ ์ถœ๋ ฅ(๋ฐ˜ํ™˜๊ฐ’)์„ ๊ฐ€์ง€๊ณ  ์žˆ๋Š” ๊ฒƒ์ฒ˜๋Ÿผ ๋žŒ๋‹ค์‹ ๋˜ํ•œ ๋งˆ์ฐฌ๊ฐ€์ง€๋‹ค. ๊ธฐ๋ณธ์ ์ธ ๋žŒ๋‹ค์‹์„ ์„ ์–ธํ•˜๋Š” ํ˜•์‹์€ ๋‹ค์Œ๊ณผ ๊ฐ™๋‹ค. ๋งค๊ฐœ๋ณ€์ˆ˜_๋ชฉ๋ก => ์‹ => ์—ฐ์‚ฐ์ž๋Š” ์ž…๋ ฅ ์—ฐ์‚ฐ์ž์ด๋‹ค. ์ด ์—ฐ์‚ฐ์ž๋Š” ๊ทธ์ € ๋งค๊ฐœ๋ณ€์ˆ˜๋ฅผ ์ „๋‹ฌํ•˜๋Š” ์—ญํ• ๋งŒ ํ•œ๋‹ค. ๋žŒ๋‹ค์‹์—์„œ๋Š” =>๋ฅผ ์ค‘์‹ฌ์œผ๋กœ ์™ผํŽธ์—๋Š” ๋งค๊ฐœ๋ณ€์ˆ˜๊ฐ€, ์˜ค๋ฅธํŽธ์—๋Š” ์‹์ด ์œ„์น˜ํ•œ๋‹ค. // ์ต๋ช… ๋ฉ”์†Œ๋“œ๋ฅผ ๋งŒ๋“œ๋ ค๋ฉด ๋Œ€๋ฆฌ์ž๊ฐ€ ํ•„์š”ํ•˜๋‹ค. delegate int Calculate(int a, int b); ... static void Main(str..

๐Ÿ—ฏ๏ธLanguage/C# 2022. 3. 28. 17:49

*์ด ๊ธ€์€ ์ฑ…์„ ๋ฐ”ํƒ•์œผ๋กœ ๊ณต๋ถ€ํ•œ ๊ธ€์ž…๋‹ˆ๋‹ค. ์–ด๋–ค ์ผ์ด ๋ฐœ์ƒํ•˜๋Š” ๊ฒƒ์„ ์•Œ ์ˆ˜ ์žˆ๋Š” ๋ฐฉ๋ฒ•์€ ํฌ๊ฒŒ ๋‘ ๊ฐ€์ง€๊ฐ€ ์žˆ๋‹ค. ์ผ์ด ๋ฐœ์ƒํ•˜๋Š”์ง€ ๊ณ„์† ๊ฐ์‹œํ•˜๊ธฐ ์ผ์ด ๋ฐœ์ƒํ•˜๋ฉด ์•Œ๋ ค๋‹ฌ๋ผ๊ณ  ํ•˜๊ณ  ๋‹ค๋ฅธ ์ผ ํ•˜๊ณ  ์žˆ๊ธฐ ๋‘ ๋ฒˆ์งธ๋Š” ๋ญ”๊ฐ€ ์ต์ˆ™ํ•˜์ง€ ์•Š๋‚˜? ์ €๋ฒˆ ๊ธ€์—์„œ ๋‹ค๋ค˜๋˜ ์ฝœ๋ฐฑ(Callback) ๋‚ด์šฉ์ด๋‹ค. ์ด๊ฒƒ์— ๊ด€ํ•ด, C#์—์„œ๋Š” ๋Œ€๋ฆฌ์ž(Delegate)๋ผ๋Š” ๋…€์„์ด ์กด์žฌํ•˜์ง€๋งŒ, ์ด๋ฒคํŠธ(Event)๋ผ๋Š” ๋…€์„๋„ ์กด์žฌํ•œ๋‹ค. ํ•˜๋‚˜๋งŒ ์žˆ์œผ๋ฉด ๋  ๊ฒƒ ๊ฐ™์€๋ฐ, ์™œ C#์—์„œ ์ด ๋‘˜์„ ์ œ๊ณตํ•˜๊ณ  ์žˆ๊ณ  ์–ด๋–ค ์ ์ด ๋‹ค๋ฅธ์ง€์— ๋Œ€ํ•ด ์ฐจ๊ทผ์ฐจ๊ทผ ์•Œ์•„๋ณด๋„๋ก ํ•˜์ž. ์ด๋ฒคํŠธ(Event) ์ œ์ผ ํ”ํ•˜๊ฒŒ ๋ณผ ์ˆ˜ ์žˆ๋Š” ์ด๋ฒคํŠธ๊ฐ€ ์•„๋งˆ ์•Œ๋žŒ ์‹œ๊ณ„๊ฐ€ ์•„๋‹๊นŒ ์‹ถ๋‹ค. ์šฐ๋ฆฌ๋Š” ์•Œ๋žŒ ์‹œ๊ณ„์˜ ์‹œ๊ฐ„์„ ์„ค์ • ํ•ด๋†“๊ณ , ๋‹ค๋ฅธ ์ผ์„ ํ•˜๊ณ  ์žˆ๋‹ค๊ฐ€ ์‹œ๊ฐ„์ด ๋˜๋ฉด ์•Œ๋žŒ ์†Œ๋ฆฌ๋ฅผ ๋“ค์–ด์„œ ์‹œ๊ฐ„์ด ๋‹ค ๋œ ๊ฒƒ์„ ..

๐Ÿ—ฏ๏ธLanguage/C# 2022. 3. 28. 16:24

*์ด ๊ธ€์€ ์ฑ…์„ ๋ฐ”ํƒ•์œผ๋กœ ๊ณต๋ถ€ํ•œ ๊ธ€์ž…๋‹ˆ๋‹ค. 1. ์ผ๋ฐ˜ํ™” ๋Œ€๋ฆฌ์ž (Generic Delegate) ๋Œ€๋ฆฌ์ž๋Š” ์ผ๋ฐ˜ ๋ฉ”์†Œ๋“œ๋ฟ๋งŒ ์•„๋‹ˆ๋ผ ์ผ๋ฐ˜ํ™” ๋ฉ”์†Œ๋“œ๋„ ์ฐธ์กฐํ•  ์ˆ˜ ์žˆ๋‹ค. ๋ฌผ๋ก  ์ด ๊ฒฝ์šฐ์— ๋Œ€๋ฆฌ์ž ๋˜ํ•œ ์ผ๋ฐ˜ํ™” ๋ฉ”์†Œ๋“œ๋ฅผ ์ฐธ์กฐํ•  ์ˆ˜ ์žˆ๋„๋ก ํ˜•์‹ ๋งค๊ฐœ๋ณ€์ˆ˜๋ฅผ ์ด์šฉํ•˜์—ฌ ์„ ์–ธ๋˜์–ด์•ผ ํ•œ๋‹ค. delegate void Memo(T memo); ์ฐธ์กฐํ•  ๋ฉ”์†Œ๋“œ ๋˜ํ•œ ๋‹น์—ฐํžˆ ์ผ๋ฐ˜ํ™” ๋ฉ”์†Œ๋“œ๋กœ ์ž‘์„ฑํ•ด์ค˜์•ผ ํ•œ๋‹ค. static void WriteMemo(T memo) { Console.WriteLine($"{memo.GetType()} ํ˜•์‹์˜ ๋ฉ”๋ชจ"); Console.WriteLine($"๋‚ด์šฉ์€ {memo}\n"); } ํ…Œ์ŠคํŠธ๋ฅผ ํ•ด๋ณด๋ฉด ์ด์ œ ๋‹ค์Œ๊ณผ ๊ฐ™์ด ๋œจ๋Š” ๊ฒƒ์„ ๋ณผ ์ˆ˜ ์žˆ๋‹ค. static void Main(string[] args) { Me..

๐Ÿ—ฏ๏ธLanguage/C# 2022. 3. 27. 18:43

*์ด ๊ธ€์€ ์ฑ…์„ ๋ฐ”ํƒ•์œผ๋กœ ๊ณต๋ถ€ํ•œ ๊ธ€์ž…๋‹ˆ๋‹ค. ๊ฐœ์š” ์ฝœ๋ฐฑ(Callback)์ด๋ž€ ๊ฐœ๋…์„ ์ฒ˜์Œ ๋“ค์€ ๊ฒƒ์€ ์œ ๋‹ˆํ‹ฐ๋ฅผ ๊ณต๋ถ€ํ•  ๋•Œ์˜€๋‹ค. ๊ฒŒ์ž„์ด๋ž€ ๋ถ„์•ผ ํŠน์„ฑ์ƒ, ๋น„๋™๊ธฐ ์ฒ˜๋ฆฌ๊ฐ€ ์ฃผ๋ฅผ ์ด๋ฃจ๋Š” ์‹œ์ ์— ์ฝœ๋ฐฑ์ด๋ž€ ๊ฐœ๋…์€ ํ•„์ˆ˜์ ์œผ๋กœ ๋“ฑ์žฅํ•˜๋Š” ๊ฒƒ ๊ฐ™์•˜๋‹ค. ๊ทธ ๋‹น์‹œ์—๋Š” ๋ฐฐ๊ฒฝ ์ง€์‹์ด ์•„๋ฌด๊ฒƒ๋„ ์—†์—ˆ๊ธฐ ๋•Œ๋ฌธ์— ์ฝ์–ด๋ด๋„ ๋ฌด์Šจ ๋ง์ธ์ง€ ๋ชฐ๋ž๋‹ค. ์ง€๊ธˆ๋„ ๋ฌผ๋ก  ์™„๋ฒฝํ•˜๊ฒŒ ์•„๋Š” ๊ฒƒ์€ ์•„๋‹ ์ˆ˜๋„ ์žˆ๋‹ค. ๊ทธ๋ž˜๋„ ์ฑ…์„ ๋ณด๋ฉฐ ๊ณต๋ถ€ํ•œ ๊ฒƒ์„ ํ† ๋Œ€๋กœ ๋‚ด๊ฐ€ ์ดํ•ดํ•œ ๋‚ด์šฉ๋“ค์„ ์ •๋ฆฌํ•ด๋ณผ ์ƒ๊ฐ์ด๋‹ค. ์ด ๊ธ€์„ ์ฝ๋Š” ๋‹ค๋ฅธ ๋ถ„๋“ค๊ป˜ ๋„์›€์ด ๋˜์…จ์œผ๋ฉด ์ข‹๊ฒ ๊ณ , ํ‹€๋ฆฐ ์ ์ด ์žˆ๋‹ค๋ฉด ์ง€์ ๋„ ํ•ด์ฃผ์…จ์œผ๋ฉด ํ•œ๋‹ค. 1. ์ฝœ๋ฐฑ (Callback)์ด๋ž€? ์ •์˜ ๊ฐœ๋…์œผ๋กœ ๋ณธ๋‹ค๋ฉด, ํ”ผํ˜ธ์ถœ์ž๊ฐ€ ํ˜ธ์ถœ์ž๋ฅผ ๋‹ค์‹œ ํ˜ธ์ถœํ•˜๋Š” ๊ฒƒ์ด๋ผ๊ณ  ํ•œ๋‹ค. ์ด ๋ง๋งŒ ๋“ค์œผ๋ฉด ๋ฌด์Šจ ๋ง์ธ์ง€ ์ดํ•ด๊ฐ€ ์ž˜ ์•ˆ ๋๋‹ค. ๊ทธ๋ž˜์„œ ์ฑ…๊ณผ ๊ตฌ๊ธ€์— ์žˆ..

๐Ÿ—ฏ๏ธLanguage/C# 2022. 3. 27. 16:19

*์ด ๊ธ€์€ ์ฑ…์„ ๋ฐ”ํƒ•์œผ๋กœ ๊ณต๋ถ€ํ•œ ๊ธ€์ž…๋‹ˆ๋‹ค. ํ”„๋กœ๊ทธ๋žจ์„ ์‚ฌ์šฉํ•˜๋Š” ์‚ฌ์šฉ์ž๋“ค์€ ์ •๋ง ์ฐฝ์˜์„ฑ์ด ๋‹๋ณด์ด๋Š” ์—ฌ๋Ÿฌ๊ฐ€์ง€ ๋ฐฉ๋ฒ•๋“ค์„ ์ ์šฉํ•˜๊ธฐ๋„ ํ•œ๋‹ค. ์ˆ ์ง‘ ํ”„๋กœ๊ทธ๋žจ์„ ๋งŒ๋“ค์–ด์„œ ์‚ฌ์šฉ์ž์—๊ฒŒ ์ฃผ๋ฌธ์„ ๋ฐ›์„ ์ค€๋น„๋ฅผ ํ•ฉ๋‹ˆ๋‹ค. ์‚ฌ์šฉ์ž๊ฐ€ ๋“ค์–ด์˜ค์ž, ํ™”์žฅ์‹ค์ด ์–ด๋”จ๋ƒ๊ณ  ๋ฌป์Šต๋‹ˆ๋‹ค. ์ˆ ์ง‘์€ ๋ชจ๋‘ ๋ถˆ์— ํƒ€๋ฒ„๋ ธ๊ณ , ๊ทธ๋ ‡๊ฒŒ ์ „๋ถ€ ์‚ฌ๋ผ์กŒ์Šต๋‹ˆ๋‹ค. SNS์—์„œ ๊ฐ€๋” ๋ณผ ์ˆ˜ ์žˆ๋Š” ํ”„๋กœ๊ทธ๋ž˜๋ฐ ์œ ๋จธ์ธ๋ฐ, ์ง€๊ธˆ ๋”ฑ ๋น„์œ ํ•˜๊ธฐ ์ ๋‹นํ•œ ์ƒํ™ฉ์ธ ๊ฒƒ ๊ฐ™๋‹ค. ๋งŒ์•ฝ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์˜ ํŠธ๋žœ์žญ์…˜๊ณผ ๊ฐ™์€ ๋ถ€๋ถ„์—์„œ ์˜ค๋ฅ˜๋‚˜ ๋‹ค์šด์ด ๋ฐœ์ƒํ–ˆ์„ ๋•Œ, ์ฒ˜๋ฆฌํ•ด์ฃผ๋Š” ๋ถ€๋ถ„์ด ์—†๋‹ค๋ฉด ํ”ผํ•ด๋Š” ์น˜๋ช…์ ์ผ ๊ฒƒ์ด๋‹ค. ์ด๋ ‡๋“ฏ, ํ”„๋กœ๊ทธ๋žจ์ด ์˜ค๋ฅ˜๋ฅผ ์ผ์œผํ‚ค๊ฑฐ๋‚˜ ์‹ฌ์ง€์–ด ๋‹ค์šด๊นŒ์ง€ ์ผ์–ด๋‚˜์ง€ ์•Š๋„๋ก ์ž˜ ์ฒ˜๋ฆฌํ•˜๋Š” ๊ฒƒ์ด ํ•„์š”ํ•˜๋‹ค. ์ด๊ฒƒ์„ ์˜ˆ์™ธ ์ฒ˜๋ฆฌ(Exception Handling)์ด๋ผ๊ณ  ํ•œ๋‹ค. ์˜ˆ์™ธ ์ฒ˜๋ฆฌ (Exception ..

๐Ÿ—ฏ๏ธLanguage/C# 2022. 3. 26. 14:10