29. System.Exceptionํด๋ž˜์Šค, throw๋ฌธ
ยท
๐Ÿ’ป Programming Language/C#
System.Exception ํด๋ž˜์Šค๋Š” ๋ชจ๋“  Exception์˜ Baseํด๋ž˜์Šค์ด๋‹ค. ๋ชจ๋“  Exception๋“ค์€ System.Exception ํด๋ž˜์Šค๋ฅผ ์ƒ์†๋ฐ›๋Š”๋‹ค. ์•ž์„œ ์‚ฌ์šฉํ–ˆ๋˜ IndexOutOfRangeException ์˜ˆ์™ธ ํด๋ž˜์Šค๋„ System.Exception์œผ๋กœ๋ถ€ํ„ฐ ํŒŒ์ƒ๋œ ๊ฒƒ System.Exception์„ ์ด์šฉํ•ด์„œ ๋ชจ๋“  ์˜ˆ์™ธ์‚ฌํ•ญ์„ ์ฒ˜๋ฆฌํ•˜์ง€ ์•Š๋Š” ์ด์œ  ๊ฐœ๋ฐœ์ž๊ฐ€ ์˜ˆ์ƒํ•˜์ง€ ๋ชปํ–ˆ๋˜ ์˜ˆ์™ธ๋ฅผ ์ฒ˜๋ฆฌํ•  ์ˆ˜๋Š” ์žˆ์ง€๋งŒ, ์ฒ˜๋ฆฌํ•˜์ง€ ์•Š์•„๋„ ๋  ์˜ˆ์™ธ๊นŒ์ง€ ๋ชจ๋‘ ์ฒ˜๋ฆฌ๋ฅผ ํ•จ์œผ๋กœ์จ ์˜ค๋ฅ˜๊ฐ€ ๋ฐœ์ƒํ•  ์ˆ˜ ์žˆ๊ธฐ ๋•Œ๋ฌธ์— System.Exception์„ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์€ ์‹ ์ค‘ํ•˜๊ฒŒ ๊ณ ๋ คํ•ด์•ผํ•œ๋‹ค. throw๋ฌธ ํ˜•์‹ try { throw new Exception("์˜ˆ์™ธ๋ฅผ ๋˜์ง"); } catch(Exception e) { Console.Writ..
29-1. Null ๋ณ‘ํ•ฉ ์—ฐ์‚ฐ์ž(Null Operator)
ยท
๐Ÿ’ป Programming Language/C#
? : Nullable ํƒ€์ž…์„ ์„ ์–ธํ•  ๋•Œ ์‚ฌ์šฉํ•˜๋Š” ์—ฐ์‚ฐ์ž ?? ๋„(Null) ๋ณ‘ํ•ฉ ์—ฐ์‚ฐ์ž a ?? 100 ์—์„œ a ๊ฐ’์ด null์ด๋ฉด 100์„ ๋ฆฌํ„ดํ•˜๊ณ , a๊ฐ€ null์ด ์•„๋‹ˆ๋ฉด a์˜ ๋ณธ๋ž˜๊ฐ’์„ ๋ฆฌํ„ดํ•œ๋‹ค. ๊ฐ’์ด null์ด ๋˜๋Š” ๊ฒƒ์„ ๋ง‰๊ธฐ์œ„ํ•ด ์‚ฌ์šฉํ•˜๋Š” ๋“ฏํ•˜๋‹ค. (๊ฐœ์ธ์ ์ธ ์˜๊ฒฌ) namespace NullOperatorEx { class Program { static void Main(string[] args) { int? bb = null; Console.WriteLine($"{bb ?? 10}"); bb = 12; Console.WriteLine($"{bb ?? 10}"); string str1 = null; // string ํƒ€์ž…์€ nullable์ด ๊ฐ€๋Šฅํ•˜๊ธฐ์— ๋”ฐ๋กœ nullable์—ฐ์‚ฐ์ž(`?`)๊ฐ€ ๋ถ™์ง€ ์•Š์•„..
28. ์˜ˆ์™ธ์ฒ˜๋ฆฌ(Exception Handling)
ยท
๐Ÿ’ป Programming Language/C#
์˜ˆ์™ธ ์ฒ˜๋ฆฌ ๊ตฌ๋ฌธ(try - catch) try{ // ์‹คํ–‰์ฝ”๋“œ } catch(Exception ๊ฐ์ฒด1){ // ์–ด๋–ค ์˜ˆ์™ธ๊ฐ€ ๋ฐœ์ƒํ–ˆ์„๋•Œ ์ฒ˜๋ฆฌ ์ฝ”๋“œ } catch(Exception ๊ฐ์ฒด2){ // catch๋ฌธ์€ ์—ฌ๋Ÿฌ๊ฐœ๊ฐ€ ์˜ฌ ์ˆ˜ ์žˆ๋‹ค. } ... Ex - ๊ธฐ์กด ์˜ˆ์™ธ ๋ฐœ์ƒ ์ฝ”๋“œ namespace ExceptionEx { class Program { static void Main(string[] args) { int[] array = {1,2,3,4,5}; for(int i = 0; i < 6; i++) { Console.WriteLine(array[i]); } Console.WriteLine("ํ”„๋กœ๊ทธ๋žจ ์ข…๋ฃŒ!!"); } } } Output 1 2 3 4 5 Unhandled exception. System.In..
27. ์ œ๋„ค๋ฆญ ์ปฌ๋ ‰์…˜
ยท
๐Ÿ’ป Programming Language/C#
์ œ๋„ค๋ฆญ ์ปฌ๋ ‰์…˜(Generic Collection)์˜ ์กด์žฌ ๋ฐ ์‚ฌ์šฉ ์ด์œ  Generic Collection : object ํ˜•์‹์— ๊ธฐ๋ฐ˜ํ•œ ๊ธฐ์กด ์ปฌ๋ ‰์…˜์˜ ๋ฌธ์ œ๋“ค์„ ํ•ด๊ฒฐํ•˜๋Š” ๋ฐฉ๋ฒ•์œผ๋กœ ์‚ฌ์šฉ๋˜๊ณ  ์žˆ๋‹ค. Generic(์ผ๋ฐ˜ํ™”) ๊ธฐ๋ฐ˜์œผ๋กœ ๋งŒ๋“ค์–ด์ ธ ์žˆ๊ธฐ ๋•Œ๋ฌธ์— ์ปดํŒŒ์ผ์‹œ ์‚ฌ์šฉํ•  ํ˜•์‹์ด ์ •ํ•ด์ง€๋ฏ€๋กœ ํ˜•๋ณ€ํ™˜ ๋ฐœ์ƒ์ด ์ค„์–ด๋“ ๋‹ค. ์ปฌ๋ ‰์…˜์ด ๊ฐ€์ง€๊ณ  ์žˆ๋Š” ์„ฑ๋Šฅ์ƒ์˜ ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•  ์ˆ˜ ์žˆ๋‹ค. โญ๏ธโญ๏ธโญ๏ธ๊ธฐ์กด ์ปฌ๋ ‰์…˜์ด ๊ฐ€์ง€๊ณ  ์žˆ๋Š” ์„ฑ๋Šฅ์ƒ์˜ ๋ฌธ์ œ ์ปฌ๋ ‰์…˜์€ ๋ฐ์ดํ„ฐ๋ฅผ objectํ˜•์‹์œผ๋กœ ์ €์žฅํ•จ. int, double, string๊ณผ ๊ฐ™์€ ํƒ€์ž…์„ ์ปฌ๋ ‰์…˜์— ์ €์žฅํ•˜๊ฒŒ๋˜๋ฉด objectํ˜•์‹์œผ๋กœ ์ €์žฅํ•˜๊ณ  ์ปฌ๋ ‰์…˜์ด ์ปดํŒŒ์ผ๋ ๋•Œ ์ด์™€ ๊ฐ™์ด ํ˜•๋ณ€ํ™˜์ด ๋งค๋ฒˆ ์ผ์–ด๋‚˜๊ฒŒ๋จ. ๋˜ํ•œ ์ปดํŒŒ์ผ์‹œ ๋ฟ๋งŒ ์•„๋‹ˆ๋ผ ์ปฌ๋ ‰์…˜ ๋‚ด ์š”์†Œ(๋ฐ์ดํ„ฐ)์— ์ ‘๊ทผํ•  ๋•Œ์—๋„ ํ˜•๋ณ€ํ™˜์ด ๊ณ„์†ํ•ด์„œ ๋ฐœ์ƒํ•˜๊ธฐ ..
26. ์ œ๋„ค๋ฆญ์Šค(Generics) ํƒ€์ž… ์ œ์•ฝ
ยท
๐Ÿ’ป Programming Language/C#
์ œ๋„ค๋ฆญ์Šค ํƒ€์ž… ์ œ์•ฝ ์•ž์—์„œ ๋‚˜์˜จ ์ผ๋ฐ˜ํ™” ๋ฉ”์†Œ๋“œ, ์ผ๋ฐ˜ํ™” ํด๋ž˜์Šค์—์„œ ์‚ฌ์šฉํ•˜๋˜ T(Type Parameter)๋Š” ๋ชจ๋“  ๋ฐ์ดํ„ฐ ํ˜•์‹์„ ๋Œ€์‹ ํ•  ์ˆ˜ ์žˆ๋Š” ๋งค๊ฐœ๋ณ€์ˆ˜๋กœ ์‚ฌ์šฉ๋˜์—ˆ๋‹ค. ๋ชจ๋“  ํ˜•์‹์„ ๋Œ€์‹ ํ•˜๋Š” ๋งค๊ฐœ๋ณ€์ˆ˜๊ฐ€ ํ•„์š”ํ•  ์ˆ˜๋„ ์žˆ์ง€๋งŒ ๊ทธ๋ ‡์ง€ ์•Š์€ ๊ฒฝ์šฐ๋„ ์กด์žฌํ•  ์ˆ˜ ์žˆ๋‹ค. ๊ทธ๋Ÿฐ ๊ฒฝ์šฐ์—๋Š” ๋งค๊ฐœ๋ณ€์ˆ˜์— ์ œ์•ฝ ์กฐ๊ฑด์„ ์ค„ ์ˆ˜ ์žˆ๋‹ค. ์ œ์•ฝ ์กฐ๊ฑด ์ฃผ๋Š” ๋ฐฉ๋ฒ•์œผ๋กœ where์ ˆ์„ ์ด์šฉํ•œ๋‹ค. Ex) class DemoList where T : DemoClass { ... } ์œ„์™€ ๊ฐ™์€ ๊ฒฝ์šฐ์— T๋ผ๋Š” ๋งค๊ฐœ๋ณ€์ˆ˜๋Š” "DemoClass๋กœ ๋ถ€ํ„ฐ ์ƒ์†๋ฐ›๋Š” ํ˜•์‹์ด์–ด์•ผ ํ•œ๋‹ค" ๋ผ๋Š” ์˜๋ฏธ void CopyData(T a, T b) where T : struct // struct๋Š” ๊ธฐ๋ณธ์ ์œผ๋กœ value type(๊ฐ’ ํ˜•์‹) { ... } ์œ„์™€ ๊ฐ™์€ ๊ฒฝ์šฐ T๋Š”..
25. ์ œ๋„ค๋ฆญ์Šค(Generics)
ยท
๐Ÿ’ป Programming Language/C#
์ œ๋„ค๋ฆญ์Šค(Generics) : int, float, double ๋“ฑ๊ณผ ๊ฐ™์€ ๋ฐ์ดํ„ฐ ํƒ€์ž…์„ ํ™•์ •ํ•˜์ง€ ์•Š๊ณ , ์ด ๋ฐ์ดํ„ฐ ํƒ€์ž… ์ž์ฒด๋ฅผ ํƒ€์ž… ํŒŒ๋ผ๋ฏธํ„ฐ(Type Parameter)๋กœ ๋ฐ›์•„๋“ค์ด๋„๋ก ํ•˜๋Š” ๊ธฐ๋Šฅ ์ œ๋„ค๋ฆญ์Šค(Generics)๋ผ๊ณ  ํ•˜๋ฉด ์ผ๋ฐ˜ํ™”๋ผ๊ณ  ํ”ํžˆ ์•Œ๋ ค์ ธ์žˆ๋‹ค. Generic ๋ฉ”์†Œ๋“œ ์„ ์–ธ ๋ฐฉ์‹ ์ ‘๊ทผ์ œํ•œ์ž ๋ฐ˜ํ™˜ํ˜•์‹ ๋ฉ”์†Œ๋“œ ์ด๋ฆ„ (๋งค๊ฐœ๋ณ€์ˆ˜) { ... } Ex) void CopyData(int a, int b) { b = a; b์— a๋ฅผ ๋ณต์‚ฌ } void CopyData(string a, string b) { b = a; b์— ๋ฌธ์ž์—ด a๋ฅผ ๋ณต์‚ฌ } ... ๋‹ค๋ฅธ ํƒ€์ž…์— ๋Œ€ํ•œ CopyData ๋ฉ”์†Œ๋“œ๋“ค... ์œ„์˜ ๋ฐฉ์‹์€ ๋ฐ์ดํ„ฐ ํ˜•์‹์— ๋”ฐ๋ผ์„œ ์—ฌ๋Ÿฌ ๊ฐœ์˜ ๋ฉ”์†Œ๋“œ๊ฐ€ ํ•„์š”ํ•˜๋‹ค. ๋น„ํšจ์œจ์ ์ธ ๋ฐฉ๋ฒ• ์œ„์˜ ๋ฐฉ์‹์„ Generic ..
24. yield ํ‚ค์›Œ๋“œ
ยท
๐Ÿ’ป Programming Language/C#
Enumerator(Iterator) : ์ง‘ํ•ฉ์ ์ธ ๋ฐ์ดํ„ฐ์…‹์œผ๋กœ๋ถ€ํ„ฐ ๋ฐ์ดํ„ฐ๋ฅผ ํ•˜๋‚˜์”ฉ ํ˜ธ์ถœ์ž์—๊ฒŒ ๋ณด๋‚ด์ฃผ๊ฒŒ ํ•˜๋Š” ๊ธฐ๋Šฅ => ๋ฐ˜๋ณต์ž yield ํ‚ค์›Œ๋“œ๋Š” ํ˜ธ์ถœ์ž์—๊ฒŒ ์ปฌ๋ ‰์…˜ ๋ฐ์ดํ„ฐ๋ฅผ ํ•˜๋‚˜์”ฉ ๋ฆฌํ„ดํ•  ๋•Œ ์‚ฌ์šฉํ•˜๋Š” ํ‚ค์›Œ๋“œ yield ์‚ฌ์šฉ๋ฐฉ์‹ yield return : ์ปฌ๋ ‰์…˜ ๋ฐ์ดํ„ฐ๋ฅผ ํ•˜๋‚˜์”ฉ ๋ฆฌํ„ดํ•˜๋Š”๋ฐ ์‚ฌ์šฉ yield break : ๋ฆฌํ„ด์„ ์ค‘์ง€ํ•˜๊ณ  Iteration ๋ฃจํ”„๋ฅผ ๋น ์ ธ๋‚˜์˜ฌ๋•Œ ์‚ฌ์šฉ IEnumerator == ๋ฐ์ดํ„ฐ๋ฅผ ๋ฆฌํ„ด(Getter)ํ•˜๋Š” ์—ด๊ฑฐ์ž public interface IEnumerator { object Current { get; } bool MoveNext(); void Reset(); } Current ์ฝ๊ธฐ ์ „์šฉ ํ”„๋กœํผํ‹ฐ๋กœ ํ˜„์žฌ ์œ„์น˜์˜ ๋ฐ์ดํ„ฐ๋ฅผ object ํƒ€์ž…์œผ๋กœ ๋ฆฌํ„ดํ•œ๋‹ค. object๋Š” System..