- 공유 링크 만들기
- X
- 이메일
- 기타 앱
안녕하세요 메르세데스입니다. 이번 시간에는 C#의 이벤트를 사용하는 방법을 알아보겠습니다.
제가 델파이 프로그램을 수년 간 사용해와서 이벤트라는 것이 익숙합니다. 비슷할 거라고 생각이 드는데요..
비쥬얼 프로그램에서는 필수적인 요소가 아닐 수 없거든요.. 프로그램이 실행이 되었는데 어떤 버튼을 눌렀을 때.. 어떤 기능이 실행이 된다던가.. 함수가 돌아가서 결과를 해당 폼에 출력을 한다 던가.. 이런 프로그램에 익숙해져있었습니다.
버튼을 눌렀을 때 클릭 안에 특정 기능/함수를 만들어 넣으면 그만 이거든요.. 자동으로 그것과 관련된 procedure등이 만들어지기 때문에 개발자들은 크게 신경을 안 써도 됐습니다.
하지만 C#에서는 비슷한 일을 해야 하는 것을 만들 때 개발자가 필요한 것들을 일일이 생각해서 추가 시켜야 하는 것이 번거롭습니다.
그런 것 때문에 제가 느끼기에는 C#서 이 기능을 사용하기는 결코 만만한 게 아닌 것 같습니다.
전 시간부터 해왔었던 델리게이트를 조금 변형해서 이벤트로 만들어 사용하는 것이지요.. 그렇다 보니.. 이것과 델리게이트를 구분 지어 표시 해야 하는 방법이 추가되어 제가 봤을 땐 조금 번거로워 보입니다.
이것을 만드는 절차를 정리했습니다.
델리게이트를 이용해서 event한정자로 선언 하는 것과.. 이벤트 핸들러 라는 것을 델리게이트 형식으로 선언해야 하는 게 들어가서 복잡하게 느껴집니다. ㅜㅜㅜㅜ
예제를 돌려서 살펴봐야겠습니다.
사용하는 순서에 의거해서.. public event EventHandeler So.... <-- 이벤트 라는 한정자로 델리게이트의 인스턴스를 선언했죠..
main class/메소드 부분에서 stati public void MyHandler(string message ) <-- 여기를 살펴보면 delegate형식과 일치하는 Method를 event핸들러로 만들었습니다..
뒤에 숫자가 3..6..9 로 끝나는 값이 있을 때마다 실행이 되네요....
그런데 왜 이런 이벤트를 번거로운 절차에 의해서 사용해야 할까요? 델리게이트와 비슷하잖아요..?!
이 둘은 차이점이 있습니다. 외부에서 접근할 수 있다? 없다! 의 차이가 이 둘의 가장 큰 차이라고 합니다.
한정자가 public으로 되어있다 하더라도 외부에서 호출이 불가능합니다. 보안성이 중요시 되는 부분에 이것을 사용해야 한다고 할 때.. 필요하다는 것이지요.. (그냥 delegate를 private으로 하면 안 될까요? )
아래는 연습문제입니다. 모범정답은 안나와있죠^^
결과가 "축하합니다! 30번째 고객 이벤트에 당첨되셨습니다." 가 찍히게 하면 됩니다.
그런데 살펴보면..
market.CustomerEvent += new Mydelegate(/*이벤트 처리기를 구현하세요.*/);
이렇게 나와있는데요.. 문제에 오류가 있네요.. 여기에만 구현을 하면 안됩니다. 왜냐하면 이벤트 핸들러를 만들어야 하잖아요? 4번째 항목이 빠져있습니다. 그래서..
메인메소드 밖에 static public void MyHandler(int a) { ... } 이것을 추가해서 구현했습니다. ^^; 잘됩니다.. 역시 예제를 좀 풀어봐야 이해가 되네요.머리가 녹슬어서 ㅜㅜ
이상으로 C#의 event사용하는 방법을 알아봤습니다. 감사합니다.
댓글
댓글 쓰기