본문 바로가기

C#

(10)
C# Func와 Action 대리자 이 포스트에서는 델리게이트를 사용케 하는 또 다른 문법 Func와 Action에 대해 알아보도록 한다. 둘 다 위임을 하는 경우가 있고 delegate와 용어가 겹치므로 이전에 배운 대리자는 delegate, Func와 Action에 대해선 대리자라 부르겠다. Func Func는 반환형이 존재하는 non void delegate로 볼 수 있다. Func 대리자는 다음과 같은 구조를 가지고 있다. Func myDelegate; Func는 꺾새 안에 최대 16개의 매개변수를 설정할 수 있으며 마지막에는 Func 대리자의 반환형을 명시해야 한다. 참고로 매개변수를 받지 않는 Func 대리자는 반환형만 명시하면 된다. Func myDelegate; Func 대리자에 원하는 메서드를 넣으려면 람다식을 넣거나 메서..
C# delegate (델리게이트, 대리자) 기초 C#의 델리게이트는 다른 언어의 함수 포인터 혹은 functor와 비슷한 역할을 한다고 볼 수 있다. 함수 포인터를 몰라도 처음부터 설명할 것이니 걱정하지 않아도 된다. 델리게이트는 대리자 혹은 위임의 뜻을 가지고 있는데 단어에서도 알 수 있듯이 함수의 호출을 대리로 맡긴다는 의미가 된다. 어떻게 대리로 맡기는지 델리게이트를 만들면서 해보자. Delegate 선언 및 생성 델리게이트는 다음 구조로 선언할 수 있다. delgate 타입 대리자_이름(매개변수); 델리게이트의 생성 예시로 int 한 개를 매개변수로 가지고 리턴 타입이 int인 델리게이트를 생성하는 코드를 보도록 하자. delegate int MyDelegate(int x); Mydelegate functor; 이렇게 만들어진 델리게이트 객체에..
C# 확장 메서드 Extension Method C#에서는 기존에 존재하던 클래스나 타입에 메서드를 덧붙이는 확장 메서드 문법을 지원한다. JS를 공부한 사람이라면 JS의 프로토타입과 유사하다고 이해할 수 있다. 예를 들어 이런 식으로 int에 Double이라는 메서드를 추가할 수 있다. namespace ExtensionLibrary { public static class IntExtension { public static int Double(this int x) { return x * x; } public static void Add(this ref int x, int arg) { x += arg; } } } this는 메서드를 덧붙이길 원하는 클래스나 타입이 된다. 확장 메서드를 구현하기 위해 필수로 포함해야 되는 매개변수가 된다. 위 코드처럼 ..
C# ref와 out의 차이 C#에서는 레퍼런스를 전달할 때 ref 또는 out 키워드를 이용해 전달해야 하며 전달하는 인자의 레퍼런스를 명시해야만 한다. ref나 out이나 레퍼런스를 의미하는 것은 똑같은데 어떤 차이가 있을까? out은 출력 전용 매개 변수의 의미로 작동하는데 ref에서 안전장치를 하나 더 거는 것으로 이해할 수 있다. out 키워드로 지정된 인자는 반드시 값을 할당해야 하는 조건이 들어간다. public static void StoreAndAdd(ref int x, out int y) { y = x; ++x; } // 에러가 뜨지 않는다. 즉, ref와 out은 레퍼런스를 전달한다는 본질은 같지만 out은 버그를 줄이기 위한 제약이 추가된다고 이해할 수 있다. int a = 20; int test; functi..
C# 프로그래밍 강좌 6 - 변수와 자료형 3 (실수) 이번에는 실수를 다뤄보도록 하자. float, double, decimal C#에서는 기본적으로 위 3개의 자료형으로 사용하여 실수를 다루게 된다. float 먼저 float를 보자. float는 이전 글에서 4바이트만큼 할당되는 자료형임을 알 수 있다. float 변수를 초기화하기 위해선 다음과 같이 써야 한다. using System; namespace TrainCsharp { class Program { static void Main(string[] args) { float a = 1.0f; Console.WriteLine(a); } } } 바로 소수점 값을 대입할 때 f를 붙여 이 값이 float 자료형임을 알려줘야 한다. 소수점이 붙은 값은 기본적으로 double 자료형으로 인식되는데 8바이트의..