C#/C# 기본 18

[C#] default 연산자

default 연산자 default (T)를 사용하여 T 타입의 기본 값을 가져온다. 값 타입으로부터 0을 반환하고 참조 타입은 null을 반환한다. nullable의 경우 기본 값은 null이며 enum의 경우 0을 기본으로 한다. struct는 값 타입이기 때문에 모든 필드와 속성이 0으로 초기화된 값을 반환한다. class Program { enum MyType { A = 0, B = 1, C = 2 } static void Main(string[] args) { Console.WriteLine(default(int)); // 0 (값 타입) Console.WriteLine(default(object) is null); // true (참조 타입) void DisplayDefaultOf() { va..

C#/C# 기본 2021.11.08

[C#] 스레드

C#에서 사용되는 스레드와 태스크를 알아본다. 스레드 스레드를 사용함으로써 스레드간 자원 공유가 가능하고 스레드를 이용하여 둘 이상의 로직을 동시에 실행하는 것처럼 만들 수 있으며 멀티 코어를 가진 컴퓨터에서 CPU 이용률을 높인다. 스레드의 생성과 시작 스레드는 새로운 실행 흐름을 만드는 것이므로 함수를 할당하여 스레드를 만들 수 있다. // 쓰레드 인스턴스 생성 Thread t1 = new Thread(new ThreadStart(DoSomething)); public Thread(ParameterizedThreadStart start); public Thread(ThreadStart start); public Thread(ParameterizedThreadStart start, int maxStac..

C#/C# 기본 2021.10.21

[C#] 파일 입출력

C#에서 IO와 관련된 기능을 알아본다. 파일 정보와 디렉토리 정보 System.IO 네임스페이스 안에 포함되어 있다. 파일의 생성, 복사, 삭제, 이동 등의 기능을 지원하는 클래스 - File(정적 메서드), FileInfo(인스턴스 메서드) 디렉토리의 생성, 삭제, 이동, 조회를 처리하는 클래스 - Directory(정적 메서드), DirectoryInfo(인스턴스 메서드) 파일과 디렉터리관련 함수 기능 File FileInfo Directory DirectoryInfo 생성 Create() Create() CreateDirectory() Create() 복사 Copy() CopyTo() - - 삭제 Delete() Delete() Delete() Delete() 이동 Move() MoveTo() M..

C#/C# 기본 2021.10.21

[C#] dynamic 타입

dynamic .NET과 COM과 같은 외부 API 그리고 다른 언어를 C#에서 실행할 때 사용할 수 있는 형식이다. dynamic의 기능 C#에서 제공하는 형식 검사를 dynamic 형식에 대해 수행하지 않는다. 대신 정상적으로 동적 실행 시간에 실행될 것이라고 기대하여 dynamic 타입을 지정한다. class MyClass { public void FuncA() {} } static void Main(string[] args) { MyClass inst = new MyClass(); inst.FuncA(); inst.FuncB(); // Not OK dynamic inst2 = new MyClass(); inst2.FuncA(); inst2.FuncB(); // No Compile Error } d..

C#/C# 기본 2021.10.19

[C#] 리플렉션과 애트리뷰트

C#에서 제공하는 형식의 메타 정보를 의미하며 이 형식 정보를 이용하여 직접 개체를 생성하거나 프로퍼티를 사용, 메서드를 호출할 수 있다. Object의 GetType() 메서드 모든 개체의 공통 조상인 Object에는 GetType() 메서드를 가지고 있다. 이 메서드가 반환하는 것은 해당 타입 정보를 가지고 있는 Type 이라는 클래스의 인스턴스이다. int a = 0; Type type = a.GetType(); FieldInfo[] fields = type.GetFields(); foreach (FieldInfo field in fields) Console.WriteLine($"Type : {field.FieldType.Name}, Name : {field.Name}"); 위와 같이 Type 클래..

C#/C# 기본 2021.10.19

[C#] LINQ

LINQ : Language INtegrated Query, C#에 도입된 통합된 데이터 질의 기능 SQL 언어랑 비슷하며 데이터를 다루기 위한 문법이다. Name과 Height를 프로퍼티로 가지는 Profile 클래스가 있다하자. 다음과 같은 배열에서 Height가 175 미만인 인스턴스를 오름차순으로 정렬하고 싶을때 만족하는 Profile 인스턴스만 찾고 싶다면 긴 문법을 작성해야한다. Profile[] arrProfile = { new Profile(){ Name = "정우성", Height = 186}, new Profile(){ Name = "김태희", Height = 158}, new Profile(){ Name = "고현정", Height = 172}, new Profile(){ Name =..

C#/C# 기본 2021.10.18

[C#] 람다식

람다식 함수형 프로그래밍의 근간이 되는 람다 계산법에서 사용하는 식을 말한다. C#에서 표현하는 람다식은 매개변수_목록 => 식 으로 표현된다. - 예시 delegate int Function(int a, int b); static void Main(string[] args) { Function func = (int a, int b) => a + b; } 컴파일러는 람다의 매개 변수의 타입을 지정하지 않아도 타입 유추를 통해 가능하다면 람다 함수를 생성할 수 있다. Function func = (a, b) => a + b; 단일 실행문장이 아닌 여러 세미 콜론을 사용하는 문의 경우 중괄호를 이용하여 그 안에 실행하는 문장을 표현한다. Function func = (a, b) => { int c = a +..

C#/C# 기본 2021.10.15

[C#] 대리자와 이벤트

대리자 delegate 대리자란 함수의 호출을 대신하는 객체로 C++의 function 혹은 임의의 함수를 타입지정하는 것과 유사하다. 한정자 delegate 반환 형식 대리자_이름(매개변수_목록) delegate int MyDelegate(int a, int b); MyDelegate 타입은 두 int 형 매개변수를 받아 int를 반환하는 함수를 의미한다. 대리자를 통한 함수 호출은 다음과 같다. 1) 대리자를 선언한다. 2) 대리자 인스턴스를 만들고 함수를 등록한다. 3) 대리자를 호출한다. C++과 다르게 대리자의 함수의 경우 멤버 함수와 정적 함수 모두 형식만 맞으면 등록하여 호출할 수 있다는 점이다. C++에서 멤버 함수의 경우 첫번쨰 인자에 인스턴스를 바인딩해야한다. class Calculat..

C#/C# 기본 2021.10.15

[C#] Generic 프로그래밍 / 예외 처리

C#의 일반화 프로그래밍 Generic Programming C++에서 template를 C#에서 어떻게 하는 지 알아본다. 일반화 메서드 메서드 이름 뒤에 를 붙여 임의의 타입에 대해 동작하는 일반화 메서드를 정의한다. void CopyArray (T[] source, T[] target) { for(int i =0;i 10) throw new FilterableException() { ErroNo = num }; else Console.WriteLine($"Output : {num}"); } catch (FilterableException e) when (e.ErroNo < 0) { Console.WriteLine("Negative Input is not allowed"); } catch (Filte..

C#/C# 기본 2021.10.12

[C#] 배열 / 컬렉션 / 인덱서

배열의 선언과 사용 데이터형식[] 이름 = new 데이터형식[용량]; - 5개 원소를 가지는 배열 int[] scores = new int[5]; 배열은 메모리가 연속적인 구조를 갖는다. 배열은 다음과 같이 3가지 방법으로 초기화할 수 있다. string[] array1 = new string[3] { "hello", "안녕", "Halo" }; string[] array2 = new string[] { "안녕", "Hello", "Halo" }; string[] array3 = { "안녕", "Hello", "Halo" }; ^연산자를 이용한 배열 인덱스 접근 c#8.0에서부터 ^숫자는 인덱스를 지칭하게 된다. 실제 타입은 System.Index 형식이다. ^숫자 = 배열.Length - 숫자의 의미를..

C#/C# 기본 2021.10.11