20. 람다식(Lambda Expression)
프로그램을 설계하면서, 간혹 한번만 사용하고싶은 함수가 있을 때가 있다. 이번 한번만 사용하고, 이후에 다시 재사용할 일이 없을 것 같아서 따로 함수를 선언하기 애매한 일회용 함수들. 혹은, 매개변수를 넘길 때, 기존의 값을 연산한 값으로 넘기고 싶을 때가 있다. 예를 들면 이런 식으로 말이다. public delegate int Calculate(int a, int b); static void Main(string[] args) { Calculate cal; cal = delegate(int a, int b) { return a + b; }; } 이렇게 함은, 대리자에 메서드를 전달하고 싶을 때, 기존의 메서드를 이용할 수는 없고, 그렇다고 새로 만들자니 다시 사용할 일 없는 함수를 전달하고자 할 때,..
18. 대리자 (Delegate)
대리자(Delegate)란, 정해진 매개변수와 반환타입이 일치하는 메서드에 대한 참조를 저장하여, 해당 메서드를 호출하는 기능을 한다. 예를들어, 정수 두개를 매개로 받아 서로 더한 정수값을 반환하는 int Sum(int a, int b) 와, 정수 두개를 매개로 받아 서로 곱한 정수값을 반환하는 int Mul(int a, int b)가 있다고 가정해보자면, 두 메서드 모두 반환값이 int로 동일하고, 매개변수로 두개의 정수를 입력받기 때문에, 해당 메서드를 하나의 대리자로 호출할 수 있다. 대리자의 선언 및 참조저장방식은 다음과 같다. public int Sum(int a, int b) { return a + b; } public int Mul(int a, int b) { return a * b; } ..
15. 연산자 오버로딩
객체지향 프로그래밍을 하면서, 객체들의 요소를 서로 비교하거나, 더할 때가 생긴다. 예를들면, A라는 사람과 B라는 사람을 객체로 두고, 이 사람들의 소지금을 요소라고 가정했을 때, 우리가 A의 소지금에서 B의 소지금을 빼려고 하면 A.money - B.money 와 같은 연산이 필요했다. 이런 경우에서 더 나아가, 소지금 뿐 아니라 나이, 키, 몸무게 등 여러가지 요소를 비교하거나, 더하고 빼는 등, 각 객체들의 요소를 연산하고 싶어질 때가 많으면 많을수록, 많은 연산을 반복해야한다는 번거로움이 생긴다. 또한, 이렇게 연산한 값을 가진 새로운 객체를 만들고자 한다면, 구조가 많이 복잡해질 수 있다. 이럴때, 객체들끼리 + 연산자를 통해서 서로가 가진 요소들을 더할수는 없을까? 이러한 기능을 연산자 오버..