객체들 사이의 느슨한 연결을 가능케 하는 이벤트와 델리게이트(Delegate) 개념은 현대적인 소프트웨어 설계의 핵심 요소이다.
C++에서는 별도의 키워드 대신 함수 포인터나 std::function을 활용해 이 메커니즘을 구현하는 방법을 정리했다.
함수를 담는 그릇, 델리게이트의 구현
델리게이트는 특정 함수를 가리키고 있다가 필요할 때 대신 호출해주는 대리자 역할을 한다.
-
std::function: 함수 포인터, 람다식, 함수 객체 등 호출 가능한 모든 것을 담을 수 있는 도구이다.
C++에서 델리게이트를 구현할 때 가장 먼저 고려해야 할 표준 도구이다. -
std::bind: 함수의 인자를 미리 채워두거나, 특정 객체의 멤버 함수를 델리게이트에 연결할 때 사용한다.
객체와 메서드를 연결하는 역할을 한다. -
람다식: 익명 함수를 즉석에서 만들어 델리게이트에 전달하면 코드가 간결해지고 흐름을 파악하기 쉬워진다.
이벤트 기반 프로그래밍
이벤트는 특정 사건(클릭, 데이터 수신 등)이 발생했을 때 등록된 델리게이트들을 실행하는 구조이다.
이를 통해 사건 발생(Event)과 처리 로직(Callback)을 분리할 수 있다.
객체 간의 결합도가 낮아지므로 유지보수가 용이하다.
유연한 상호작용
함수를 데이터처럼 주고받으며 실행 시점을 제어하는 방식은 시스템의 확장성을 높이는 데 강력한 도구이다.
람다식과 std::function을 조합해 효율적인 콜백 구조를 설계하는 연습이 필요하는 것 같다.