์ด๋ฒคํธ
: ํน์ ํ ์ผ์ด ์ผ์ด๋ฌ์์ ์๋ ค์ฃผ๋ ๊ธฐ๋ฅ
C#
์์๋ ์ด๋ฒคํธ
๋ฅผ ๋ธ๋ฆฌ๊ฒ์ดํธ(delegate)
์ ํจ๊ป ์ฌ์ฉํ๋ค.
event
ํค์๋๋ฅผ ์ด์ฉํ์ฌ ํ์ํ๋ค.
์ด๋ฒคํธ ์ ์ธ๊ณผ ์ฌ์ฉ ์์
1. delegate๋ฅผ ์ ์ธ
2. ์ ์ธ๋ delegate์ event ํค์๋๋ฅผ ๋ถ์ฌ์ค๋ค.
3. event handler๋ฅผ ์์ฑํ๋ค. ์ ์ธ๋ delegate์ ํ๋กํ ํ์
๊ณผ ๋์ผํ๊ฒ ๋ฉ์๋๋ฅผ ์์ฑ.
=> ์ด๋ event handler๋ delegate ์ ์ธ์์ ํ๋กํ ํ์
๊ณผ ๋์ผํ ๋ฉ์๋ํํ๋ก ์์ฑํ๋ค.
4. ํด๋์ค์ ์ธ์คํด์ค๋ฅผ ์์ฑํ๊ณ , ์ด ๊ฐ์ฒด์ ์ด๋ฒคํธ ํธ๋ค๋ฌ๋ฅผ ๋ฑ๋ก
5. ์ด๋ฒคํธ๊ฐ ๋ฐ์ํ๋ฉด ์ด๋ฒคํธ ํธ๋ค๋ฌ ํธ์ถ
using System.Collections;
namespace EventEx
{
delegate void EventHandler(string msg); // 1
class EventDemo
{
public event EventHandler eventHandler; //2
// ๋๋ฆฌ์๋ฅผ ์ด๋ฒคํธ ๋ฉค๋ฒ๋ก ์ฌ์ฉ.
// ๋ํ eventํค์๋๋ฅผ ์ด์ฉํด ์ ์ธํ๋ฉด ์ธ๋ถ์์ ์ฌ์ฉํ ์ ์๋ค. public์ผ ์ง๋ผ๋.
// ์ธ๋ถ์์ ๊ด๋ จ์๋ ์ด๋ฒคํธ๊ฐ ๋ค์ด์ฌ ์ ์๊ธฐ ๋๋ฌธ์.
public void TestMethod(int a)
{
if (a % 2 == 0)
{
eventHandler(String.Format($"{a} : ์ง์"));
}
}
}
class Program // 3
{
static public void MyHandler(string msg)
{
Console.WriteLine(msg);
}
static void Main(string[] args) // 4
{
EventDemo mydemo = new EventDemo();
mydemo.eventHandler += new EventHandler(MyHandler);
for (int i = 0; i < 20; i++)
{
mydemo.TestMethod(i);
}
}
}
}
Output
0 : ์ง์
2 : ์ง์
4 : ์ง์
6 : ์ง์
8 : ์ง์
10 : ์ง์
12 : ์ง์
14 : ์ง์
16 : ์ง์
18 : ์ง์
- eventํค์๋๋ฅผ ์ด์ฉํด ์ ์ธํ๋ฉด ์ธ๋ถ์์ ์ฌ์ฉํ ์ ์๋ค. public์ผ ์ง๋ผ๋.
- ์ธ๋ถ์์ ๊ด๋ จ์๋ ์ด๋ฒคํธ๊ฐ ๋ค์ด์ฌ ์ ์๊ธฐ ๋๋ฌธ์.