2024. 7. 26. 17:42ㆍC#
안녕하세요. 진득 코딩입니다. 이번 시간에는 함수를 변수처럼 사용할 수 있게 해주는 대리자와 응용 프로그램에서 발생하는 모든 사건들을 말하는 이벤트에 대해서 살펴보도록 하겠습니다.
delegate
delegate에 대해서 살펴보기 전에 Tank라는 클래스를 만들어 주었습니다. 해당 클래스에는 여러 메서드들을 포함하고 있습니다.
위와 같이 클래스를 만들고 Move라는 함수에 delegate해줍니다. delegate된 Move에 tank에 있는 메서드들을 마치 변수처럼 추가하거나 삭제할 수 있습니다. 전진, 후진, 회전을 넣은 후 회전만 다시 뺀 상태에서 result를 출력해보면 전진과 후진이 출력되는 것을 확인하실 수 있습니다.
위와 같이 대리자는 변수처럼 함수의 매개변수로 사용될 수도 있습니다. 하지만 매개변수로 사용할 때에는 선언한 함수와 타입이 똑같아야 하고 인자 수도 같아야만 가능합니다.
이벤트
그동안 아무 생각없이 편하다고 생각했던 여러 이벤트들이 사실은 delegate와 함께 사용되는 함수였습니다. 이벤트란 응용 프로그램에서 발생하는 모든 사건을 이벤트라고 부르고 이벤트를 처리하는 메소드인 핸들러를 가지게 됩니다.
위와 같이 이벤트는 delegate와 함께 작동되는 함수입니다. 해당 예제는 EventHandler가 마우스 클릭을 감지하지는 않지만 button_input_Click 메서드를 통해서 의도적으로 클릭 이벤트를 발생시켜서 이벤트의 내부를 살펴보았습니다.
여러 도구들의 이벤트를 사용하면서 편하다는 생각만 했지 어떤 식으로 돌아갈지에 대해서는 생각해보지 않은 것 같습니다. 개발자를 꿈꾸는 사람으로서 부끄럽다는 생각이 들었습니다. 앞으로는 그냥 편리한 것에 안주하는 사람이 아닌 좀 더 탐구하고 노력하고 발전하는 개발자가 되도록 노력하겠습니다. 이번 포스팅은 여기까지입니다. 끝까지 봐주셔서 감사합니다.😀
'C#' 카테고리의 다른 글
[C#] WPF에 있는 imageBox를 활용해보자 (0) | 2024.07.29 |
---|---|
[C#] WPF를 이용하여 C# 개발하기 (0) | 2024.07.29 |
[C#] 멀티스레드를 이용하여 레이스 프로그램을 만들어보자 (0) | 2024.07.26 |
[C#] 멀티 스레드에 대해서 알아보자 (0) | 2024.07.26 |
[C#] 제네릭 컬렉션으로 빠르고 안정적이게 데이터를 다뤄보자 (0) | 2024.07.26 |