30. C# 7.0에서 throw문 표현식, finally 절
·
💻 Programming Language/C#
C# 7.0에서의 throw문의 표현식(Expression) using System.Collections; //c# 7.0에서의 throw문의 표현식(Expression) namespace ExceptionEx { class Program { static void Main(string[] args) { try { int? aa = null; int bb = aa ?? throw new ArgumentNullException(); } catch (ArgumentNullException e) { Console.WriteLine(e.Message); } try { int[] arr = {1, 2, 3 }; int idx = 5; int value = arr[idx >= 0 && idx < 4 ? idx : t..
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 ..