Unity3d C# toolba 사용해보기

C# event (이벤트) 를 알아보겠습니다.

안녕하세요 메르세데스입니다. 이번 시간에는 C#의 이벤트를 사용하는 방법을 알아보겠습니다.

제가 델파이 프로그램을 수년 간 사용해와서 이벤트라는 것이 익숙합니다. 비슷할 거라고 생각이 드는데요..

비쥬얼 프로그램에서는 필수적인 요소가 아닐 수 없거든요..  프로그램이 실행이 되었는데 어떤 버튼을 눌렀을 때.. 어떤 기능이 실행이 된다던가.. 함수가 돌아가서 결과를 해당 폼에 출력을 한다 던가.. 이런 프로그램에 익숙해져있었습니다.

버튼을 눌렀을 때 클릭 안에 특정 기능/함수를 만들어 넣으면 그만 이거든요.. 자동으로 그것과 관련된  procedure등이 만들어지기 때문에 개발자들은 크게 신경을 안 써도 됐습니다.

하지만 C#에서는 비슷한 일을 해야 하는 것을 만들 때 개발자가 필요한 것들을 일일이 생각해서 추가 시켜야 하는 것이 번거롭습니다.

그런 것 때문에 제가 느끼기에는 C#서 이 기능을 사용하기는 결코 만만한 게 아닌 것 같습니다.

전 시간부터 해왔었던 델리게이트를 조금 변형해서 이벤트로 만들어 사용하는 것이지요.. 그렇다 보니.. 이것과 델리게이트를 구분 지어 표시 해야 하는 방법이 추가되어 제가 봤을 땐 조금 번거로워 보입니다.

이것을 만드는 절차를 정리했습니다.


c#이벤트핸들러

델리게이트를 이용해서 event한정자로 선언 하는 것과.. 이벤트 핸들러 라는 것을 델리게이트 형식으로 선언해야 하는 게 들어가서 복잡하게 느껴집니다.  ㅜㅜㅜㅜ

예제를 돌려서 살펴봐야겠습니다.


C# event example


사용하는 순서에 의거해서..     public event EventHandeler So....  <-- 이벤트 라는 한정자로 델리게이트의 인스턴스를 선언했죠..

main class/메소드 부분에서  stati public void MyHandler(string message )   <-- 여기를 살펴보면 delegate형식과 일치하는 Method를 event핸들러로 만들었습니다..

뒤에 숫자가 3..6..9 로 끝나는 값이 있을 때마다 실행이 되네요....     

그런데 왜 이런 이벤트를 번거로운 절차에 의해서 사용해야 할까요?  델리게이트와 비슷하잖아요..?!

이 둘은 차이점이 있습니다. 외부에서 접근할 수 있다? 없다! 의 차이가 이 둘의 가장 큰 차이라고 합니다.


C#델리게이트이벤트차이

한정자가 public으로 되어있다 하더라도 외부에서 호출이 불가능합니다.   보안성이 중요시 되는 부분에 이것을 사용해야 한다고 할 때..  필요하다는 것이지요.. (그냥 delegate를 private으로 하면 안 될까요? )

아래는 연습문제입니다. 모범정답은 안나와있죠^^ 

결과가 "축하합니다! 30번째 고객 이벤트에 당첨되셨습니다." 가 찍히게 하면 됩니다.



C# event example2

그런데 살펴보면.. 

market.CustomerEvent += new Mydelegate(/*이벤트 처리기를 구현하세요.*/);

이렇게 나와있는데요..  문제에 오류가 있네요..   여기에만 구현을 하면 안됩니다.  왜냐하면 이벤트 핸들러를 만들어야 하잖아요? 4번째 항목이 빠져있습니다.   그래서.. 

메인메소드 밖에  static public void MyHandler(int a) { ... } 이것을 추가해서 구현했습니다. ^^; 잘됩니다.. 역시 예제를 좀 풀어봐야 이해가 되네요.머리가 녹슬어서  ㅜㅜ

이상으로 C#의 event사용하는 방법을 알아봤습니다. 감사합니다.













댓글