이벤트 핸들러 학습 예제

2025. 11. 6. 10:49·C#

 

// Create.cs
public Action<string> TempAction;  

string recivedData = "사과";

public void TriggerAction()
{
    TempAction?.Invoke(recivedData);
}
// Form1.cs
private Create create = new Create();

public Form1()
{
    InitializeComponent();

    create.TempAction += ReadData;
}

private void button2_Click(object sender, EventArgs e)
{
    create.TriggerAction();
}

private void ReadData(string obj)
{
    MessageBox.Show($"Action 호출됨: {obj}");
}

 

>> TempAction? 조건은 “현재 구독자가 등록되어 있느냐”를 확인하는 것이고,
create.TempAction += ReadData; 덕분에 TempAction이 null이 아니게 되어,

TriggerAction()이 실행될 때 ReadData()가 호출됨

 

< 흐름 >

1. Form1이 Create 클래스의 인스턴스 create 를 생성한다.

2. Form1의 ReadData 메서드를 create.TempAction을 구독한다.

3. UI 이벤트가 발생하면, create.TriggerAction이 호출된다.

4. TriggerAction이 TempAction?.Invoke(recivedData); 을 실행한다.

5. TempAction의 구독자가 있다면 이벤트를 일으키고, recivedData를 넘겨준다.

6. 구독자는 ReadData 이므로 자신 메서드를 실행한다.

 

이벤트 발행자 (Publisher) Create 클래스 이벤트를 정의하고 발생시키는 쪽
이벤트 구독자 (Subscriber) Form1 클래스 이벤트를 감지하고 반응하는 쪽
이벤트 핸들러 (Event Handler) ReadData() 이벤트가 발생했을 때 실행될 메서드
델리게이트 (Delegate) Action<string> 핸들러를 저장하고 실행할 수 있는 변수
이벤트 발생(Event Invoke) TempAction?.Invoke(recivedData) 실제로 델리게이트를 통해 핸들러 실행

 

< 개념 요약 >

개념  역할
Action<string> 델리게이트(“메서드 포인터”)
TempAction 이벤트를 담는 필드
+= ReadData 이벤트 구독 (핸들러 등록)
?.Invoke(...) 이벤트 호출 (발행자 → 구독자 통보)
string obj 전달되는 데이터
ReadData() 이벤트가 호출될 때 실행되는 메서드 = 이벤트 핸들러

< Delegate >

메서드를 변수처럼 저장하고 전달할 수 있게 해주는 타입 = 메서드 주소를 담는 포인터

나중에 메서드를 대신 호출하려고 사용하는 변수

 

델리게이트(delegate) 메서드를 대신 실행할 수 있는 “메서드 참조 변수”
Invoke() 델리게이트가 가리키는 메서드 실행
+= / -= 델리게이트에 메서드 추가 / 제거
이벤트(event) 델리게이트를 기반으로, “특정 시점에 호출되도록” 만든 구조

'C#' 카테고리의 다른 글

과제 요구사항 분석  (0) 2025.11.06
이벤트 핸들러 학습 후 응용한 예제  (0) 2025.11.06
학생조회프로그램 - 외부클래스 분리버전  (0) 2025.11.05
"이벤트 핸들러"를 사용한 "인자 전달"  (0) 2025.11.05
인스턴스  (0) 2025.11.05
'C#' 카테고리의 다른 글
  • 과제 요구사항 분석
  • 이벤트 핸들러 학습 후 응용한 예제
  • 학생조회프로그램 - 외부클래스 분리버전
  • "이벤트 핸들러"를 사용한 "인자 전달"
joo_coding
joo_coding
2025.02.18~
  • joo_coding
    주코딩일지
    joo_coding
  • 전체
    오늘
    어제
    • 분류 전체보기 (219)
      • 일지 (19)
      • 계획표 (7)
      • 프로젝트 (6)
      • C언어 (35)
        • 연습장 (12)
      • C++ (3)
      • C# (34)
      • Python (28)
        • 연습장 (11)
      • TCP IP (4)
      • DB (2)
      • ubuntu (1)
      • Git (0)
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 링크

  • 공지사항

  • 인기 글

  • 태그

    c언어 #vscode #gcc #윈도우 #c언어윈도우 #gcc윈도우 #vscode윈도우 #c #c++
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.3
joo_coding
이벤트 핸들러 학습 예제
상단으로

티스토리툴바