안녕하세요 여러분. 오늘은 C# 프로그래밍을 하다가 객체 간의 결합도를 낮추고 유연한 구조를 만들고 싶을 때 반드시 마주하게 되는 주제를 가져왔습니다. 바로 델리게이트와 이벤트로 구현하는 발행 구독 패턴 이야기인데요.
처음 코딩을 배울 때는 클래스끼리 서로 직접 참조하고 메서드를 호출하는 게 너무 당연해서 코드가 점점 복잡하게 얽히곤 합니다. 저도 예전에는 화면 UI와 비즈니스 로직을 연결하느라 코드를 이리저리 꼬아놓고 디버깅하느라 밤을 지새웠던 기억이 나네요.
이럴 때 구원투수처럼 등장하는 개념이 바로 델리게이트와 이벤트입니다. 이 둘의 원리를 살짝만 이해하고 활용해도 객체들이 서로를 직접 알지 못하면서도 메시지를 주고받는 아주 깔끔한 구조를 만들 수 있답니다.
먼저 델리게이트는 메서드를 변수처럼 주고받을 수 있게 해주는 특별한 타입입니다.
쉽게 말해 어떤 메서드의 모양새, 즉 반환값과 매개변수 형태만 똑같다면 실행 중에 이 메서드 저 메서드로 갈아 끼울 수 있는 만능 리모컨 같은 역할을 합니다. 하나의 델리게이트에 여러 개의 메서드를 줄줄이 엮어둘 수도 있어서 콜백 함수를 처리할 때 정말 유용하게 써먹을 수 있더라고요.
하지만 실무에서 객체 간의 이벤트를 다룰 때 델리게이트를 그대로 노출하면 외부에서 함부로 이벤트를 초기화해 버리거나 가로채는 위험한 상황이 생길 수 있습니다.
그래서 C#에서는 이 델리게이트를 안전하게 감싸서 외부에서는 오직 구독과 취소만 할 수 있도록 제한해 주는 이벤트라는 문법을 제공합니다.
발행 구독 패턴의 핵심이 바로 여기에 있습니다. 어떤 사건이 발생했을 때 데이터를 발행하는 쪽은 누가 듣고 있는지 신경 쓸 필요 없이 그냥 이벤트만 쾅 하고 터뜨려주면 되고, 그 상황에 관심이 있는 구독자들은 미리 등록해 둔 메서드를 통해 자연스럽게 반응하는 식이죠.
제가 예전에 여러 모듈이 유기적으로 데이터를 주고받아야 하는 프로그램을 만들 때 이 이벤트를 적극적으로 도입했었는데요. 클래스 간의 의존성이 확 줄어들면서 코드가 훨씬 모듈화되고 유지보수하기가 편해졌던 기억이 납니다.
객체 지향 설계를 하다 보면 각 컴포넌트가 서로를 너무 잘 알아서 수정하기 두려워지는 순간이 오곤 합니다. 그럴 때 델리게이트와 이벤트를 활용해 발행 구독 구조를 얹어주면 코드가 훨씬 유연해진다는 걸 체감하실 수 있을 거예요.
오늘 이렇게 C#의 델리게이트와 이벤트를 활용한 발행 구독 패턴의 기초를 가볍게 짚어보았는데 어떻게 도움이 되셨나요. 프로그램 안에서 객체들 간의 소통 방식을 고민하고 계셨다면 오늘 내용이 작은 실마리가 되었기를 바랍니다.
저는 이런 사소한 설계 패턴 글이 나중에 코드를 탄탄하게 만들어 주더라고요. 비슷한 고민 있으셨다면 댓글로 편하게 이야기 나눠주세요. 이웃 추가하시면 비슷한 실생활 코딩 정보도 자주 올려볼게요.
0 댓글