대리자의 캡슐화
대리자는 클래스 외부에서 마음대로 호출하거나 초기화할 수 있다는 위험이 있다. 이를 해결하기 위해 이벤트가 존재한다.
-
이벤트 본질: 객체 지향의 발행-구독(Publish-Subscribe) 모델을 구현한다.
-
차이점 분석: delegate 키워드는 직접 호출이 가능하지만, event 키워드는 오직 해당 이벤트를 선언한 클래스 내부에서만 발생시킬 수 있다. 외부에서는 오직 구독(+=)과 취소(-=)만 가능하여 보안성과 설계의 의도를 보호한다.
-
실전 활용: WinForm의 버튼 클릭, 서버의 패킷 수신 알림 등 객체 간의 상태 변화를 전파할 때 사용한다.
코드의 익명화
메소드에 이름을 붙이지 않고 필요한 곳에서 즉시 정의하여 사용하는 기술이다.
-
익명 메소드: C# 2.0 이후 delegate 키워드를 사용하여 메소드 이름을 생략하고 로직을 할당한다.
-
람다식: C# 3.0 이후 => 연산자를 사용하여 익명 메소드를 더욱 간결하게 표현한다.
-
식 형식 람다: (x, y) => x + y 형태의 구문을 가진다.
-
문 형식 람다: { … } 형태의 코드 블록을 가진다.
-
-
클로저 현상(Closure): 람다식이 자신이 감싸고 있는 외부 변수를 참조할 때 발생하는 메모리 캡처 메커니즘이다.
표준 대리자
새 대리자 타입을 정의할 필요 없이 .NET에서 제공하는 범용 대리자를 사용할 수 있다.
-
Action: 반환 값이 없는 메소드용 대리자이다.
-
Func: 반환 값이 있는 메소드용 대리자이다.