[면접대비] C# 심화(3)
대리자(델리게이트)란
특정 매개변수와 반환 타입을 가진 메서드를 참조하여 변수처럼 저장하고 호출할 수 있게 해주는 타입입니다
델리게이트도 데이터형이어서 선언을 해야한다
대리자 메서드 호출 방법
방법 1은 대리자 변수에 괄호를 붙여 호출하고
방법 2는 Invoke() 메서드를 명시적으로 호출하는 것입니다
멀티캐스트 대리자란
하나의 대리자에 여러 메서드를 연결하는 것입니다
+= 연산자로 메서드를 추가하고 -= 연산자로 제거합니다
내장 대리자란
.NET에서 자주 사용되는 대리자 형식을 미리 정의하여 제공하는 것입니다.
| 대리자 | 설명 |
|---|---|
Action | 반환값이 없는 메서드 |
Action<T> | T 매개변수를 받고 반환값이 없는 메서드 |
Func<TResult> | 반환값이 TResult인 메서드 |
Func<T, TResult> | T 매개변수를 받고 TResult를 반환하는 메서드 |
Predicate<T> | T 매개변수를 받고 bool을 반환하는 메서드 |
익명 메서드란
별도의 메서드를 정의하지 않고 대리자에 직접 코드를 할당할 수 있는 메서드입니다
SayDelegate say = delegate()
{
Console.WriteLine("반갑습니다.");
};
람다식이란
익명 메서드를 간결하게 표현하여 대리자 인스턴스를 만드는 방법으로, LINQ와 함께 사용할 때 유용합니다.
식 람다 / 문장 람다란
식 람다는 => 뒤에 하나의 식을 작성하는 람다식이고, 문장 람다는 { } 안에 여러 문장을 작성하는 람다식입니다.
클로저란
람다식이나 익명 메서드가 자신이 선언된 외부 범위의 변수를 캡처하여 해당 범위를 벗어난 이후에도 사용할 수 있게 하는 기능입니다
int factor = 2;
Func<int, int> multiplier = n => n * factor;
Console.WriteLine(multiplier(3)); // 3 * 2 = 6
factor = 10;
Console.WriteLine(multiplier(3)); // 3 * 10 = 30
여기서 factor가 캡쳐고 클로저다
콜백 함수란
콜백 함수는 다른 함수에 전달되어 특정 시점이나 조건에서 호출되는 함수입니다
이벤트란
게시자가 특정 상황이 발생했음을 알리면 이벤트를 구독한 구독자들의 이벤트 핸들러가 호출되도록 하는 기능입니다.
이벤트는 외부에서 할당할 수 없으며 클래스 내부에서만 사용할 수 있습니다
표준 이벤트 패턴이란
.NET에서 이벤트를 일관되게 처리하기 위해 EventHandler 또는 EventHandler 대리자를 사용하는 방식입니다.
튜플이란
여러 개의 값을 하나의 단위로 묶어서 저장하는 데이터입니다
튜플은 값 타입이라 다른 변수에 할당하면 복사본이 생성됩니다
익명 타입이란
클래스나 타입을 직접 정의하지 않고 new와 프로퍼티를 이용해 컴파일러가 자동으로 생성하도록 하는 타입입니다. LINQ 쿼리에서 데이터를 임시로 묶을 때 사용하며 반드시 var 키워드로 선언해야합니다
제네릭이란
제네릭은 타입을 매개변수로 받아 사용하는 시점에 구체적인 타입을 지정함으로써 다양한 타입에서 코드를 재사용할 수 있도록 하는 기능입니다.
타입 매개변수 제약조건
타입 매개변수에 제약 조건을 걸어 특정 조건을 만족하는 타입만 허용할 수 있습니다
닷넷 프레임워크의 제네릭 컬렉션
리스트, 딕셔너리, 스택, 큐, 해시셋이 있습니다
제네릭 상속에서 열린 상속과 닫힌 상속
열린 상속은 부모의 제네릭 타입 매개변수를 그대로 유지하며 자식 클래스에서도 타입을 나중에 지정하는 방식이고, 닫힌 상속은 부모의 제네릭 타입에 구체적인 타입을 지정하여 상속하는 방식입니다

